【问题标题】:How do I make this little twitching go away?我怎样才能让这个小小的抽搐消失?
【发布时间】:2014-01-31 19:55:41
【问题描述】:

所以我在我的SpriteKit游戏项目中有一个更新方法,其中根据领导者跟随的方向决定其他跟随角色的位置:

-(void) update {

if (_followingEnabled == YES || _isLeader == YES) {

switch (currentDirection) {
    case up:
        self.position = CGPointMake(self.position.x, self.position.y + speed);
        // making a line of characters
        if (self.position.x < _idealX && _isLeader == NO) {
            self.position = CGPointMake(self.position.x + 1, self.position.y);
        } else if (self.position.x > _idealX && _isLeader == NO) {
            self.position = CGPointMake(self.position.x - 1, self.position.y);
        }
        break;
    case down:
        self.position = CGPointMake(self.position.x, self.position.y - speed);
        // making a line of characters
        if (self.position.x < _idealX && _isLeader == NO) {
            self.position = CGPointMake(self.position.x + 1, self.position.y);
        } else if (self.position.x > _idealX && _isLeader == NO) {
            self.position = CGPointMake(self.position.x - 1, self.position.y);
        }
        break;
    case left:
        self.position = CGPointMake(self.position.x - speed, self.position.y);
        // making a line of characters
        if (self.position.y < _idealY && _isLeader == NO) {
            self.position = CGPointMake(self.position.x, self.position.y + 1);
        } else if (self.position.y < _idealY && _isLeader == NO) {
            self.position = CGPointMake(self.position.x, self.position.y - 1);
        }
        break;
    case right:
        self.position = CGPointMake(self.position.x + speed, self.position.y);
        // making a line of characters
        if (self.position.y < _idealY && _isLeader == NO) {
            self.position = CGPointMake(self.position.x, self.position.y + 1);
        } else if (self.position.y < _idealY && _isLeader == NO) {
            self.position = CGPointMake(self.position.x, self.position.y - 1);
        }
        break;
    case noDirection:
        // in case you want to do something for noDirection
        break;
    default:
        break;
} // switch (currentDirection) {

} // if (_followingEnabled == YES && _isLeader == YES) {

}

_idealX_idealY 是从领导位置传递的整数(我确实将它们设置为属性..),跟随他的其他角色的位置是浮动的(如果我错了,请纠正我)

我的理论:

因此,当我加或减 1 时,我的字符(float)的位置永远不会等于_idealX / _idealY(int),并且语句会一遍又一遍地运行,这会导致在Y/X 轴(加减 1)。

所以你会更好地理解和想象这个,我做了一个截图(他身后的两个角色(领导者)在移动时抽搐..):

我该如何解决这个问题,这样追随者才不会在领导者身后“抽搐”或“摇晃”???

【问题讨论】:

  • 取决于是特发性震颤还是良性肌束震颤综合征。
  • 它只是向左 1 个像素,向右或上下 1 个像素,取决于方向,每秒 20 次...

标签: ios objective-c xcode ipad sprite-kit


【解决方案1】:

我不记得确切的计算了,但一般的方法是尝试并确保事物与像素网格对齐以进行显示。

x = floorf(x+0.5)

您将需要一个实际位置和一个绘图位置,因为如果您使用底值,则在低速时事情将无法按预期工作。

【讨论】:

  • 谢谢@0xFADE,原来他们的obj-C有一个四舍五入的功能,所以我所要做的就是:self.position = CGPointMake (round(self.position.x) + 1、self.position.y);其他方向也是如此......
【解决方案2】:

您不要让它们一次朝多个方向移动。也许对角线移动应该是一种选择?

【讨论】:

    猜你喜欢
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多