在直线或斜坡上向左或向右移动精灵

时间:2014-02-07 17:01:54

标签: java libgdx

如果存在斜率,如何向左或向右移动精灵?

如果它只是一条直线,那么会有像

这样的东西
if(Pressed(Keys.Left))
  position.x-=5;

  if(Pressed(Keys.Right))
  position.x+=5;

但是,如果我有这样的事情怎么办? enter image description here

如何告诉精灵在向左或向右上升或下降? 我正在使用libGDX。

3 个答案:

答案 0 :(得分:1)

我建议为游戏增加重力。重力将始终向下拉精灵(y轴为-5),但与地板的碰撞将始终停止精灵。除非有斜坡,否则精灵不会与地板碰撞,它会向下移动,也会按下按键的方向。

答案 1 :(得分:1)

  1. 如果您有坡度坐标,可以根据它调整主精灵坐标。

  2. 如果没有,您可以通过分析图片创建一个(检查循环中最低的蓝色像素坐标,将值存储到数组)

  3. 您也可以选择动态斜率搜索。如果背景发生微小变化,这将为您提供自动调整的好处。

  4. 简化示例:

    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类型的字段:xy。它们将在类的构造函数(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决定玩家的速度。

这显然需要一些先前的矢量基础知识。而且,你需要能够在场上得到具体的分数。

我希望我没有任何错误。

祝你好运