【发布时间】:2016-01-01 02:04:35
【问题描述】:
我正在开发的一款 SpriteKit 游戏遇到了一些问题。我正在尝试做一个平台风格的游戏,玩家点击屏幕让角色跳跃。我正在通过以下方式实现这一目标:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// reset the velocity each jump, so that a constant impulse is always applied
self.player.physicsBody.velocity = CGVectorMake(0, 0);
// jump the player up
[self.player.physicsBody applyImpulse:CGVectorMake(0, PLAYER_JUMP_HEIGHT)];
}
PLAYER_JUMP_HEIGHT 只是一个常数。我还设置了质量恒定的播放器。
这在 iPad 模拟器上效果很好,这是我进行大部分初始测试的地方。然而,在调整我的代码以适应设备分辨率(对于手机等)之后,我的物理现在似乎非常偏离,特别是在 iPhone 4S 模拟器上。现在,同样的冲动让玩家跳得非常高,而且他们似乎也更快地从平台等物体上掉下来,比以前更呈线性曲线。
我通过首先设置场景的缩放模式来缩放我的场景以适应多个设备:
scene.scaleMode = SKSceneScaleModeResizeFill;
我还想出了一种方法来缩放游戏中的其他所有内容,方法是将当前设备的分辨率与 iPad 的分辨率进行比较,然后除以得到一个比例因子来乘以所有内容。因此,如果 iPad 屏幕宽度为 2048,如果我在 iPhone 4S 上运行,比例因子将为 960 / 2048 = 0.46。通过这种方式,我可以使用一组可以在所有设备分辨率上缩放的常量来设计游戏,而不会出现其他缩放模式的裁剪或其他缩放问题。
我很困惑这可能是什么。我尝试在所有可能的组合中将玩家质量和跳跃高度乘以屏幕比例因子,但无济于事。我还尝试弄乱了physicsWorld 的重力和速度,但也没有用。如果有人有处理此问题的经验并愿意分享,我们将不胜感激。谢谢!
【问题讨论】:
-
您是否根据比例因子调整了
CGVector为applyImpulse? -
@WangYudong 感谢您的快速评论!我确实尝试过将 PLAYER_JUMP_HEIGHT 乘以屏幕比例因子。
标签: ios objective-c sprite-kit game-physics screen-resolution