2016-09-04 6 views
-1

Ich weiß, dass es mehrere andere Posts darüber gibt, aber mein Fall ist irgendwie spezifisch, ich habe diesen noch nicht gesehen.SKSpriteNode reagiert nicht auf set color & blendModeFactor (SpriteKit & Swift)

Ich habe in meinem Spiel einen ballförmigen Sprite, dass, wenn ich ihn anklicke, ich eine kolorierte Version des gleichen Sprites hinzufügen möchte, aber mit einem Effekt von fadeIn und fadeOut.

Möchten Sie ein Beispiel-Code geben:

self.ball = SKSpriteNode(imageNamed: "ball") 
self.ball.position = CGPoint(x: midX, y: midY) 
self.ball.zPosition = 1 
self.ball.size = CGSize(width: 100, height: 100) 

self.touchEffect = SKSpriteNode(imageNamed: "ball") 
self.touchEffect.position = CGPoint(x: 0, y: 0) 
self.touchEffect.zPosition = 2 
self.touchEffect.size = CGSize(width: 100, height: 100) 
self.touchEffect.color = UIColor.whiteColor() 
self.touchEffect.blendColorFactor = 1 
self.touchEffect.alpha = 0 

self.ball.addChild(self.touchEffect) 
self.addChild(self.ball) 

nun bis zu diesem Punkt ... Ich kann nicht einmal die touchEffect Sprite sehen colorised (wenn ich alpha zu 1 gesetzt), aber das gleiche Farbe des ursprünglichen Sprites. Warum ist das?

Am touchesBegan ich etwas wie folgt aus:

func showTapEffect() { 
    let fadeIn = SKAction.fadeInWithDuration(0.3) 
    let fadeOut = SKAction.fadeOutWithDuration(0.3) 
    let sequence = SKAction.sequence([fadeIn,fadeOut]) 

    self.touchEffect.runAction(sequence) 
} 

habe ich es auch in verschiedenen Szenarien in meinem gleichen Spiel, und es funktionierte. Ich weiß nicht, warum dieser einzigartige Fall nicht funktioniert. Irgendein Hinweis? Wenn Sie mehr Beispielcode benötigen, lassen Sie es mich wissen, es ist keine Kopie des aktuellen Codes tho, ich tippte es einfach aus meinem Speicher, damit Sie dort vielleicht einen Schreibfehler sehen. Aber der Code ist sehr ähnlich.

(Und mein Sprit ist nicht dunkel oder schwarz)

Vielen Dank im Voraus.

+0

Haben Sie es versucht? eine andere Farbe als Weiß? – 0x141E

+0

Position ist relativ, machen Touch-Effekt CGPoint.zero (midX * 2 bedeutet Ball Touch-Effekt ist außerhalb des Bildschirms) – Knight0fDragon

+0

ja ich versuchte redColor zu, aber nicht funktioniert @ 0x141E – msqar

Antwort

0

Ich poste dies eine Antwort, weil es zu groß für Kommentare ist, und ich kann Code hier bei Bedarf eingeben.

Ich lese gerade dein Ding wie 3 Mal über, Sie mischen mit Weiß, welche Farbe erwarten Sie zu erhalten? Wenn Sie Blau und Weiß mischen, erhalten Sie Blau, wenn Sie Lila und Blau mischen, erhalten Sie Blau. Wenn Sie Blau und Grau mischen, erhalten Sie ein dunkleres Blau. Es ist alles Prozent Multiplikation. Ich glaube nicht, dass Sie einen Mischmodus mit Farben auswählen können. Wie es funktioniert ist es dauert die Farbe jedes Pixels, und auf dem Pixel, bricht es in R, G, B, dann nimmt es Ihre Farbe, und bricht das in R G B (lassen Sie uns anrufen CRCGCB). Die Mathematik wird (R * CR, G * CG, B * CB) auf einer Pro-Pixel-Ebene.

Sie tun (R * 1, G * 1, B * 1), welches (R, G, B)

Wenn Sie Ihr Sprite einfärben wollen, dann müssen Sie Ihre Sprite ein grau sein Skalieren Sie Bild und verwenden Sie Farben nur dann, wenn Sie möchten, dass sie diese Farbe behalten (bis zu einem gewissen Grad, weil die Überblendung immer noch auf sie angewendet wird, müssen Sie herausfinden, wie Sie es mischen möchten)

Verwandte Themen