ios - 怎样才能让这种轻微的抽搐消失呢?

标签 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 是从领导者位置传递的整数(我确实将它们设置为属性..),跟随他的其他角色的位置是 float (如果我错了请纠正我)

我的理论:

因此,当我加或减 1 时,我的字符(float)的位置永远不会等于 _idealX/_idealY(int) 并且语句将一遍又一遍地运行,这导致了这个Y/X 轴上有轻微的“抽搐”或“晃动”(加和减 1)。

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

enter image description here

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

最佳答案

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

x = floorf(x+0.5)

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

关于ios - 怎样才能让这种轻微的抽搐消失呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21488897/

相关文章:

objective-c - 显示 "screenshot flash"作为对用户的反馈

ios - 在同一项目中同时使用 SPM 和 Cocoapods

ios - MKMapView中如何区分用户拖动 map 和位置变化?

ios - 将 DatePicker 日期转换为 UTC 格式返回 NULL

ios - 我如何实现菜单 View ,如什么是应用程序附加菜单?

ios - rangeOfUnit 在一个月中的几周返回 `NSNotFound`(iOS7 错误)

android - 谷歌如何检查刷新 token - 他们的 OAuth 2.0 的客户端绑定(bind)?

ios - 验证登录表单,我正在使用 NSString?

objective-c - UICollectionView 的延迟加载技术

iphone uiscrollview 和 uiimageview - 设置初始缩放