0

我对 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();
}
}

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

4

1 回答 1

0

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

我假设你是 Java 新手,所以我会给你一个关于枚举的小教程......

1st,将此添加到您声明变量的类的顶部:

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() 旋转它

于 2013-04-23T17:28:58.907 回答