我是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();
}
}
对此有任何帮助将不胜感激。
答案 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()
添加精灵并旋转它