2013-02-17 105 views
2

我是Cocos2D的新手,并且遇到问题。我也搜查了很多,但似乎没有找到我的问题的答案。情况是:将sprite向上移动并将其设置为起始位置

当游戏开始时,主精灵应该继续下去(如计划崩溃)。如果用户触摸屏幕中的任何位置,精灵应该移动到触摸点的Y坐标,当精灵到达该点时,它应该从那一点开始再次下降。想象一下飞机坠毁(下滑),当用户点击任何地方时,它会上升(稍微下降),然后再次开始下降。我们不必让它崩溃在地上。

所以,我已经实现了下行部分。以及上升的部分。 但问题是,当精灵完成向上时,它不会从那里开始下降,而是从它上升的地方继续下去。

请帮我实现这个目标。

这是我在init()方法下去代码:为touchesBegan方法拔地而起

[plane runAction:[CCRepeatForever actionWithAction:[CCSequence actions:[CCMoveBy actionWithDuration:1 position:ccp(0,-20)], 
                 nil]]]; 

代码:

[plane runAction:[CCMoveBy actionWithDuration:1 position:ccp(0,20)]]; 

回答

1

的问题是,您使用的是可重复的动作,一旦你申请“向上移动”操作会产生不一致性,因为这两个操作都在同一个对象上工作(我不记得上一个操作是否被取消,但这种方法无效)。

所以我会做followng为init()

. 
. 
[self startDownMovement]; 
. 
. 

然后实现startDownMovement()为:

[plane runAction:[CCSequence actions:[CCMoveBy actionWithDuration:1 position:ccp(0,-plane.potision.y)], 
            [CCCallBlock actionWithBlock: 
            ^{ 
              // Do game over logic. (i.e. plain crashed) 
             }],nil]]; 

而对于touchBegan()

[plane stopAllActions]; 
CGPoint location = [touch locationInView:touch.view]; 
[plane runAction:[CCSequence actions:[CCMoveBy actionWithDuration:1 position:ccp(0,location.y)], 
             [CCCallBlock actionWithBlock: 
             ^{ 
              [self startDownMovement]; 
             }],nil]]; 

我在这里所做的开始向下移动(我假设y = 0是碰撞点)我通过减去它的y位置来移动精灵。

如果用户触摸屏幕的平面y位置将被移动到的触摸点之后的上下运动将被再次调用(因为我用CCSequence向下移动仅向上移动动作之后已经完成将发生)