如何让这个小抽搐消失?

时间:2014-01-31 19:55:41

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

所以我在 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或减1时,我的字符(浮点数)的位置将永远不会等于_idealX / _idealY(int),并且语句将反复运行,这会导致这种“抽搐”或“颤抖”在Y / X轴上(加上和减去1)。

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

enter image description here

我如何修复这一点所以跟随者不要“甩开”或“摇摆”在领导者背后???

2 个答案:

答案 0 :(得分:4)

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

x = floorf(x+0.5)

您将需要一个实际位置和一个绘图位置,因为如果您使用了地板值,那么在低速时情况将无法正常工作。

答案 1 :(得分:0)

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