因此,我在 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时,我的字符(浮点数)的位置将永远不等于_idealX / _idealY(int),并且语句将一遍又一遍地运行,这会导致Y / X轴上的这种小的“抽动”或“摇动”(加减1)。

因此,您会更好地理解和可视化它,我制作了一个屏幕截图(它在移动时在他身后的两个字符(Leader)抽搐。)。

我该如何解决这个问题,使跟随者不要在领导者后面“抽搐”或“摇晃”?

最佳答案

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

x = floorf(x+0.5)

您将需要一个实际位置和一个工程图位置,因为如果您使用底值,则在低速下无法正常工作。

关于ios - 我该如何消除这种小抽搐?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21488897/

10-11 08:46