Position von Objekten ändern.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Position von Objekten ändern.

    Hi Leute, für mein Spiel stehe ich derzeit vor einem großen Problem:

    Ich habe im Code erzeugt, dass sich Sprites mit einer Textur in einer Endlosschleife von links nach rechts bewegen auf sozusagen 2 Linien. Jetzt will ich programmieren, dass man die Position der Sprites vertauschen kann. Das heißt, wenn der User auf ein Sprite auf der ersten Ebene klickt und dann seinen Finger nach unten auf ein anderen Sprite zieht, soll der TouchBegan Sprite und der TouchEnd Sprite sozusagen ihre Position ändern. Weiß jemand ob so etwas möglich ist?

    Vielen Dank




    Quellcode

    1. -(void)addSprite2
    2. {
    3. SKSpriteNode *sprite2 = [SKSpriteNode spriteNodeWithImageNamed:@"Test.png"];
    4. sprite2.position = CGPointMake(-40, 10);
    5. sprite2.size = CGSizeMake(100, 50);
    6. [self addChild:sprite2];
    7. SKAction *actionMove = [SKAction moveTo:CGPointMake(400, 268) duration:10];
    8. SKAction *actionMoveDone = [SKAction removeFromParent];
    9. [sprite2 runAction:[SKAction sequence:@[actionMove, actionMoveDone]]];
    10. }
    11. -(void)addSprite3
    12. {
    13. SKSpriteNode *sprite3 = [SKSpriteNode spriteNodeWithImageNamed:@"Test1.png"];
    14. sprite3.position = CGPointMake(-2, 200);
    15. sprite3.size = CGSizeMake(32, 20);
    16. [self addChild:sprite3];
    17. SKAction *actionMove = [SKAction moveTo:CGPointMake(400, 358) duration:10];
    18. SKAction *actionMoveDone = [SKAction removeFromParent];
    19. [sprite3 runAction:[SKAction sequence:@[actionMove, actionMoveDone]]];
    20. }
    21. - (void)updateWithTimeSinceLastUpdate:(CFTimeInterval)timeSinceLast
    22. {
    23. self.lastSpawnTime += timeSinceLast;
    24. if (self.lastSpawnTime > 1.5)
    25. {
    26. self.lastSpawnTime = 0;
    27. [self addSprite2];
    28. [self addSprite3];
    29. }
    30. }
    31. -(void)update:(CFTimeInterval)currentTime
    32. {
    33. CFTimeInterval timeSinceLast = currentTime - self.lastUpdateTime;
    34. self.lastUpdateTime = currentTime;
    35. if (timeSinceLast > 1.5)
    36. {
    37. timeSinceLast = 1.0 /60.0;
    38. self.lastUpdateTime = currentTime;
    39. }
    40. [self updateWithTimeSinceLastUpdate:timeSinceLast];
    41. }
    Alles anzeigen
  • Ich würde das mit einem property SKSpriteNode lösen. In TouchesBegan prüfst du ob ein Sprite getroffen wurde und speichst die Referenz im property. Dann ggf. die SKActions entfernen. In TouchesMoved kannst du die Position des Sprites an die Bewegung des Fingers anpassen. In TouchEnded setzt du das property wieder auf nil (und machst, was sonst noch so notwendig ist).