精灵朝向您按下的方向

时间:2013-04-20 10:14:07

标签: java sprite lwjgl

我是Java和LWJGL的新手。我正试图制作一个2d精灵变换外观,所以它面向你持有的方向,我将如何解决这个问题?

到目前为止,我有这个 -

package keyboardinputdb;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class KeyboardInputDB extends JFrame{

//Variables
int x, y, scoreCount;

private Image dbImage;
private Graphics dbg; 

Image littleAdventurer;
boolean faceLeft;
boolean faceRight;
boolean faceUp;

Font font = new Font("Arial", Font.BOLD, 18);

//Action Listener
public class AL extends KeyAdapter {
    public void keyPressed(KeyEvent e){
        int keyCode = e.getKeyCode();
        if(keyCode == e.VK_LEFT){
            x-=3;
            if(x <= 0){
                x = 0;
            }
        }
        if(keyCode == e.VK_RIGHT){
            x+=3;
            if(x >= 235){
                x = 235;
            }
        }
        if(keyCode == e.VK_UP){
            y-=3;
            if(y <= 20){
                y = 20;
            }
        }
        if(keyCode == e.VK_DOWN){
            y+=3;
            if(y >= 235){
                y = 235;
            }
        }
    }
    public void keyReleased(KeyEvent e){

    }
}

public KeyboardInputDB(){
    //Load Images
    ImageIcon i = new ImageIcon("C:/Users/Clive/Documents/NetBeansProjects/KeyboardInput with DB/src/keyboardinputdb/littleAdventurer.gif");
    littleAdventurer = i.getImage();

    //Game Properties
    addKeyListener(new KeyboardInputDB.AL());
    setTitle("Java Game");
    setSize(600, 500);
    setResizable(false);
    setVisible(true);
    setBackground(Color.black);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    x = 150;
    y = 150;
    scoreCount = 0;
}

public void paint(Graphics g){
    dbImage = createImage(getWidth(), getHeight());
    dbg = dbImage.getGraphics();
    paintComponent(dbg);
    g.drawImage(dbImage, 0, 0, this);
}

public void paintComponent(Graphics g){
    g.setFont(font);
    g.setColor(Color.white);
    g.drawString("Score: " + scoreCount, 450, 70);

    if(faceLeft = true){
        g.drawImage(littleAdventurer, x, y, this);
    }
    else{
        g.setColor(Color.white);
        g.fillOval(x, y, 15, 15);
    }

    repaint();
}

public static void main(String[] args) {
    KeyboardInputDB javagame = new KeyboardInputDB();
}
}

对此有任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先,您的主要问题是您使用的是jFrame而不是LWJGL。我建议你先改用LWJGL。您还使用三个布尔变量来指定精灵所面向的方向。当faceLeft和faceRight都是真的时会发生什么?你应该使用枚举。

我认为你是Java的新手,所以我会在枚举中给你一些教程......

1,将其添加到您声明可变项的类的顶部:

public static enum Direction{
      UP, DOWN, LEFT, RIGHT
}
public static Direction direction = Direction.DOWN;

您现在可以使用此代码检查枚举是否为特定值:

if(direction == Direction.LEFT){
    //Do something.
}

您也可以通过调用:

来设置枚举
direction = Direction.RIGHT;

更简单的方法是检查枚举的结果是使用switch语句:

switch(direction){
    case UP:
        //Do something when up.
        break;
    case DOWN:
        //Do something when down.
        break;
    case LEFT:
        //Do something when left.
        break;
    case RIGHT:
        //Do something when right.
        break;
}

这种我可以向初学者描述枚举的最佳方式类似于布尔值(其中包含有限数量的选项)但您可以根据需要制作任意数量的选项。

您当前的系统也没有使用LWJGL,所以如果您想使用它,我建议您更改为。一旦你学会了如何使用OpenGL,使用LWJGL比jFrame更容易制作游戏。

此页面非常有用:http://lwjgl.org/wiki/index.php?title=Main_Page#Getting_started

首先制作四边形,然后您可以轻松学习如何使用glRotatef()

添加精灵并旋转它