我是cocos2d和游戏开发的新手。目前我正在关注这个tutorial,到目前为止一直很好,基本上是:
问题:弹丸速度变化(越接触屏幕的上边界或下边界越快(游戏水平放置,如代码下方的图像所示)。我相信这是因为目标点距离我最远接近我的角色和上/下边缘,星星需要在给定时间内到达那一点(参见代码)。无论我触摸到哪里,我都希望速度恒定。我怎样才能达到如果我对我的解释感到茫然,我很抱歉。
这是明星/抛射物代码:
- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
// 1
CGPoint touchLocation = [touch locationInNode:self];
// 2
CGPoint offset = ccpSub(touchLocation, _player.position);
float ratio = offset.y/offset.x;
int targetX = _player.contentSize.width/2 + self.contentSize.width;
int targetY = (targetX*ratio) + _player.position.y;
CGPoint targetPosition = ccp(targetX,targetY);
// 3
CCSprite *projectile = [CCSprite spriteWithImageNamed:@"projectile.png"];
projectile.position = _player.position;
[self addChild:projectile ];
// 4
CCActionRotateBy *actionRotate = [CCActionRotateBy actionWithDuration: 0.5f angle:360];
[projectile runAction:[CCActionRepeatForever actionWithAction:actionRotate]];
CCActionMoveTo *actionMove = [CCActionMoveTo actionWithDuration: 1.5f position:targetPosition];
CCActionRemove *actionRemove = [CCActionRemove action];
[projectile runAction:[CCActionSequence actionWithArray:@[actionMove,actionRemove]]];
}
正如您在actionMove行中所看到的,射弹速度取决于到达targetPosition所需的时间(此图像可能有助于[没有足够的声誉来发布图像]): http://cdn5.raywenderlich.com/wp-content/uploads/2014/01/Cocos2D_MonsterMath.png
提前致谢,我们非常感谢任何帮助或阅读材料。
答案 0 :(得分:0)
如果您的射弹只是以恒定速度沿直线移动,那么:
distance = speed * time
因此,如果你想为你的忍者星设定一个恒定的速度,时间将根据行进的距离而变化。
像这样计算距离:
float distance = sqrtf(powf(targetPosition.x - projectile.position.x, 2.0f) + powf(targetPosition.y - projectile.position.y, 2.0f));
设定速度并计算时间:
ccTime flightTime = distance / speed;
在flightTime
:
CCAction
CCActionMoveTo *actionMove = [CCActionMoveTo actionWithDuration:flightTime
position:targetPosition];