Cocos2dx。有条件的行动
Cocos2dx. Conditional action
我想使用动作创建玩家移动。我创建了函数 void move(float x, float y)
;该函数创建动作 RotateTo
和 MoveTo
。我只想移动播放器 forward
和 target - forward
之间的角度小于某个值;我尝试在 update
函数的 if
条件中添加 runAction(moveAction)
和 bool lock 变量,但是 update
内的任何 runAction 调用都失败并显示 SIGSEGV
信号;
以下是我的 class 派生自 Node 的字段:
cocos2d::Action* moveAction;
cocos2d::Action* rotationAction;
在移动函数中:
void GameObject::move(float x, float y) {
startPosition = getPosition();
endPosition = Vec2(x, y);
stopAllActions();
rotationAction = RotateTo::create(
angleBetweenForwardAndTarget(endPosition) / rotateSpeed,
-Mathf::normalizeAngle(Mathf::getAngle(lookAtPosition(endPosition)))
);
runAction(rotationAction);
moveAction = MoveTo::create(
endPosition.distance(startPosition) / moveSpeed,
Vec2(x, y)
);
runAction(moveAction);
}
但是现在旋转和平移是同时发生的
如何实现?
我想使用动作创建玩家移动。我创建了函数 void move(float x, float y)
;该函数创建动作 RotateTo
和 MoveTo
。我只想移动播放器 forward
和 target - forward
之间的角度小于某个值;我尝试在 update
函数的 if
条件中添加 runAction(moveAction)
和 bool lock 变量,但是 update
内的任何 runAction 调用都失败并显示 SIGSEGV
信号;
以下是我的 class 派生自 Node 的字段:
cocos2d::Action* moveAction;
cocos2d::Action* rotationAction;
在移动函数中:
void GameObject::move(float x, float y) {
startPosition = getPosition();
endPosition = Vec2(x, y);
stopAllActions();
rotationAction = RotateTo::create(
angleBetweenForwardAndTarget(endPosition) / rotateSpeed,
-Mathf::normalizeAngle(Mathf::getAngle(lookAtPosition(endPosition)))
);
runAction(rotationAction);
moveAction = MoveTo::create(
endPosition.distance(startPosition) / moveSpeed,
Vec2(x, y)
);
runAction(moveAction);
}
但是现在旋转和平移是同时发生的 如何实现?