• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 我怎样才能让这个小小的抽搐消失?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 06:14:32 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

所以我在我的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)。

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

enter image description here

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



Best Answer-推荐答案


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

x = floorf(x+0.5)

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

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap