如果存在斜率,如何向左或向右移动精灵?
如果它只是一条直线,那么会有像
这样的东西if(Pressed(Keys.Left))
position.x-=5;
if(Pressed(Keys.Right))
position.x+=5;
但是,如果我有这样的事情怎么办?
如何告诉精灵在向左或向右上升或下降? 我正在使用libGDX。
答案 0 :(得分:1)
我建议为游戏增加重力。重力将始终向下拉精灵(y轴为-5),但与地板的碰撞将始终停止精灵。除非有斜坡,否则精灵不会与地板碰撞,它会向下移动,也会按下按键的方向。
答案 1 :(得分:1)
如果您有坡度坐标,可以根据它调整主精灵坐标。
如果没有,您可以通过分析图片创建一个(检查循环中最低的蓝色像素坐标,将值存储到数组)
您也可以选择动态斜率搜索。如果背景发生微小变化,这将为您提供自动调整的好处。
简化示例:
final int ELEVATION = 10; // how high above we slope we want to levitate
if(Pressed(Keys.Left)) {
position.x-=5;
int slopecoord = position.y; // you may want to start from 0 if you have steep ascents
// assuming your background is BufferedImage and has same size as playing screen
do {
slopecoord--;
Color c = new Color(bgImage.getRGB(position.x, slopecoord));
int red = c.getRed();
int green = c.getGreen();
int blue = c.getBlue();
//comparing colors takes some effort as your blue in image is not same over the picture
while( Math.abs(red - 48) < 25 && Math.abs(green - 158) < 25 && blue > 200 );
position.y = slopecoord - ELEVATION;
}
答案 2 :(得分:1)
我建议使用矢量。
玩家将使用向量移动。它会根据它的运动矢量移动。运动矢量将具有恒定的幅度(也称为长度),因此玩家的速度将保持不变。但它的方向会改变。
矢量的方向将根据精灵所在的楼层设置。
如果地板的当前角度(相对于x轴)为0或180度(也就是与x轴平行),则矢量也将与x轴平行。
如果在精灵下有一个斜率,将计算斜率的角度,并创建一个具有相同角度的新运动矢量,因此精灵将始终平行于地板移动。
关于具体实施的建议(所需载体的基本知识):
创建一个Vector
课程。此类将包含两个double
类型的字段:x
和y
。它们将在类的构造函数(public Vector(int a, int b)
)中设置。它还将具有normalize()
功能。
在代表播放器的班级(例如Player
班级)中,您需要添加名为Vector
的{{1}}字段。每一帧,获取地板上的点到精灵当前接触地板的点的左侧,并将其保存为movementVector
。同时获取右侧的点,并将其另存为Point a
。
每一帧,将Point b
字段设置为:
movementVector
这为您提供了所需移动角度的矢量。
然后规范化向量:new Vector( b.getX() - a.getX(), b.getY() - a.getY() );
。
现在,在继续移动对象时,请执行以下操作:
movementVector.normalize()
position_x += movementVector.getX() * h
position_y += movementVector.getY() * h
决定玩家的速度。
这显然需要一些先前的矢量基础知识。而且,你需要能够在场上得到具体的分数。
我希望我没有任何错误。
祝你好运