我正在SpriteKit中创建一个tilemap平台游戏。我为所有地砖的物理主体分配了碰撞路径,并使它们成为非动态的。我向玩家分配了两个碰撞多边形:底部有一个圆圈,顶部有一个矩形。
玩家精灵在屏幕上有一个固定的位置,而等级从右向左滚动。现在,只要玩家精灵在平地上,碰撞就能完美地运行,玩家就会在地面上行走。但是,我也有一些倾斜的地形砖,我希望玩家遵循(例如,走上坡路)。但是当玩家到达倾斜的瓷砖时,他只是从它上面反弹,无法“攀爬”它。
同样,当我从倾斜的瓷砖上方放下玩家时,他会从“山丘”上滑下来,而不是保持原位。
我将恢复原状和摩擦设置为0。
那么我怎样才能让玩家精灵跟随地面而不管它的形状如何?如何让玩家留在斜坡上而不是向下滑动呢?
我尝试使用SKConstraints,并将positionX设置为常量值。起初它似乎有效,但随后玩家被卡在倾斜的瓷砖中间并最终掉进了它。
我还在播放器上尝试了不同形状的碰撞多边形(例如,矩形而不是底部的圆形),但没有任何改变。
感谢任何帮助!
答案 0 :(得分:1)
这更多地与您的游戏逻辑有关,而不是您的地图属性。你需要为你的玩家提供几种“状态”。例如,如果您的播放器处于空闲状态,则可以将CGVector设置为0,0。这将阻止玩家向任何方向移动。
给你一些关于运动的例子。假设你想让你的对象向右移动:
// move node's physics body to the right while leaving vertical movement as is
// 160 is just an example
myNode.physicsBody.velocity = CGVectorMake(160, self.physicsBody.velocity.dy);
// do not allow right movement to exceed 160
if(myNode.physicsBody.velocity.dx > 160)
myNode.physicsBody.velocity = CGVectorMake(160, self.physicsBody.velocity.dy);
要向左移动,请反转dx值:
myNode.physicsBody.velocity = CGVectorMake(-160, self.physicsBody.velocity.dy);
if(myNode.physicsBody.velocity.dx < -160)
myNode.physicsBody.velocity = CGVectorMake(-160, self.physicsBody.velocity.dy);
允许myNode受到重力的影响,当它沿着斜坡移动时,它应该保持与地面接触。
答案 1 :(得分:0)
这是一个平铺地图平台游戏......
然后重力并不重要,将重力放到一个非常低的值,然后改变你跳跃的所有冲动,这与重力的变化有关......
OR,
可能,如果游戏不是随机生成的,你可以设置一条uibezier路径,如果他不再向山上移动,就把路径关掉。
但是如果他停在山中或从顶部开始,他仍会滑下来......
增加摩擦力(不将其设置为0)可能会有所帮助。尝试在1?
处摩擦