我正在建立一个跳投游戏一样的MegaJump为基础。我尝试使用以下代码为播放器的左右旋转动画(而不是zRotation)设置动画:
// HANDLE ACCELEROMETER L&R
if(_xAcceleration < -kAccelerationDeadZone && (_currentPlayerHeading == PlayerHeadingUp || _currentPlayerHeading == PlayerHeadingUpRight )){
_currentPlayerHeading = PlayerHeadingUpLeft;
[_player runAction:_playerAnimationHeadUpLeft];
}
else if (_xAcceleration > kAccelerationDeadZone && (_currentPlayerHeading == PlayerHeadingUp || _currentPlayerHeading == PlayerHeadingUpLeft )) {
_currentPlayerHeading = PlayerHeadingUpRight;
[_player runAction:_playerAnimationHeadUpRight];
}
其中左和右动画中的每一个都是从3-4帧构建的。问题是它不会平滑地响应加速度计的变化,我注意到在像MegaJump这样的游戏中,动画非常平滑,就像它逐帧响应加速度计的变化一样(尽管那里的动画也是从每侧旋转3-4帧创建的)。
有没有办法让它工作得更流畅,也许可以对加速度计的微小变化做出反应,以显示不同的动画帧?
发布于 2014-10-22 18:12:06
根据你的上一个答案,我怀疑你的问题可能是同一侧的动画运行了几次,因此导致它看起来一团糟。
请记住,加速度计的更新是非常敏感的,例如,您可能会得到:
0.6378
0.8041
0.6424
在不到一秒的时间内,取决于你的kAccelerationDeadZone
是什么,它可能会导致3个动画几乎同时运行。
您可以尝试两种方法:
1.-在运行动画时创建另一个播放器状态,并忽略加速度计处理程序中对播放器的任何其他更新。这样,动画必须在开始另一个动画之前完成。取决于你运行这3-4帧的速度,它可能看起来好还是不好,例如,当从左到右和后面改变得太快时,你可能会发现你的播放器正在运行_playerAnimationHeadUpRight
动画,但却在向左移动……
2.-不要运行基于加速度计数值的动画。取而代之的是基于这些来应用玩家的移动(使用kAccelerationDeadZone
),并在你的更新中:方法检查你的玩家的移动,知道它是向左还是向右移动,另外,比默认的60次/秒更少地执行这种检查,每秒检查几次方向变化就足够了。
即:
playerTimer += deltaTime;
if (playerTimer >= kPlayerUpdateDelay) {
if (player.position.x > previousPosition.x) {
// Moving right
}else if(player.position.x < previousPosition.x){
// Moving left
}
previousPosition.x = player.position;
}
如果你发布了创建动画的代码,也会有所帮助,以防万一。
如果有任何更新请告诉我。
https://stackoverflow.com/questions/26423754
复制相似问题