无尽亚军游戏中的 Sprite 套件物理?
Sprite kit physics in endless runner game?
我将如何在无尽的跑酷游戏中使用 sprite 套件物理?
无尽的奔跑者通过让玩家保持静止但以设定的速度移动背景和所有其他对象来伪造运动。
但是,我想模拟物理。
如果我让我的播放器随物理引擎移动,将背景从原始位置移动到播放器的位移,然后将播放器移回其原始位置,会怎样?
这样会不会很光滑好看?如果是这样,那么我使用什么 sprite kit 方法才不会向用户显示视觉错误。
正确的解决方案是什么?
谢谢。
正确的做法是以节点为中心的场景。了解如何执行此操作的最佳方法是继续访问 docs here(转到标题为 'Centering Scene on a Node' 的部分),但如果您在实施过程中遇到任何问题,请告诉我们!
如果您想知道它是如何工作的,背景会保持静止(除非您想要视差滚动),而角色会移动。然而,摄像机的每一帧 'follows' 一个玩家,这意味着无论你用物理移动你的玩家,屏幕都会跟随并保持角色在中心。
编辑
这是我在我的一个游戏中使用的代码,以精灵(由按钮控制的平面)为中心:
-(void)didSimulatePhysics {
... #Code here to simulate plane movement and such
SKNode *camera = [self childNodeWithName:@"//camera"];
SKNode *player = [self childNodeWithName:@"//sprite"];
if (player.position.y >= 0) camera.position = CGPointMake(player.position.x, player.position.y);
else camera.position = CGPointMake(player.position.x, 0);
[self centerOnNode:camera];
if (velocity>1){
self.directionMeter.zRotation = -M_PI/2 + mdirectionOfTravel;
}
}
-(void)centerOnNode:(SKNode *)node {
CGPoint cameraPositionInScene = [node.scene convertPoint:node.position fromNode:node.parent];
node.parent.position = CGPointMake(node.parent.position.x - cameraPositionInScene.x, node.parent.position.y - cameraPositionInScene.y);
}
基本上,当玩家在某个位置上方时,我将相机与玩家一起向上移动。当玩家在 x-axis 上的任何地方移动时,相机总是会随之移动。我有接触检测来找到玩家撞到地面的位置(因此丢失),背景颜色(天空)根据飞机的高度而变化(飞机越高,蓝色越深)。
我将如何在无尽的跑酷游戏中使用 sprite 套件物理?
无尽的奔跑者通过让玩家保持静止但以设定的速度移动背景和所有其他对象来伪造运动。
但是,我想模拟物理。
如果我让我的播放器随物理引擎移动,将背景从原始位置移动到播放器的位移,然后将播放器移回其原始位置,会怎样?
这样会不会很光滑好看?如果是这样,那么我使用什么 sprite kit 方法才不会向用户显示视觉错误。
正确的解决方案是什么?
谢谢。
正确的做法是以节点为中心的场景。了解如何执行此操作的最佳方法是继续访问 docs here(转到标题为 'Centering Scene on a Node' 的部分),但如果您在实施过程中遇到任何问题,请告诉我们!
如果您想知道它是如何工作的,背景会保持静止(除非您想要视差滚动),而角色会移动。然而,摄像机的每一帧 'follows' 一个玩家,这意味着无论你用物理移动你的玩家,屏幕都会跟随并保持角色在中心。
编辑
这是我在我的一个游戏中使用的代码,以精灵(由按钮控制的平面)为中心:
-(void)didSimulatePhysics {
... #Code here to simulate plane movement and such
SKNode *camera = [self childNodeWithName:@"//camera"];
SKNode *player = [self childNodeWithName:@"//sprite"];
if (player.position.y >= 0) camera.position = CGPointMake(player.position.x, player.position.y);
else camera.position = CGPointMake(player.position.x, 0);
[self centerOnNode:camera];
if (velocity>1){
self.directionMeter.zRotation = -M_PI/2 + mdirectionOfTravel;
}
}
-(void)centerOnNode:(SKNode *)node {
CGPoint cameraPositionInScene = [node.scene convertPoint:node.position fromNode:node.parent];
node.parent.position = CGPointMake(node.parent.position.x - cameraPositionInScene.x, node.parent.position.y - cameraPositionInScene.y);
}
基本上,当玩家在某个位置上方时,我将相机与玩家一起向上移动。当玩家在 x-axis 上的任何地方移动时,相机总是会随之移动。我有接触检测来找到玩家撞到地面的位置(因此丢失),背景颜色(天空)根据飞机的高度而变化(飞机越高,蓝色越深)。