uni要求我用java创建一个2d赛车游戏。我们被告知在 jframe 中使用一个 jcomponent。我们告诉通过摇摆计时器更新游戏并在其适当的地方调用 repaint()。
我现在已经完成了,但是在我使用 Graphics g 的过程中一直让我很烦。例如,下面是我的游戏对象类,玩家和其他东西都来自该类。
import java.awt.Component;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
/*
* Provides The basic functionality of Displaying a game object on the screen
* and methods able to change the image
*/
public class GameObject {
public Vector position = new Vector();
//image set up variables
protected BufferedImage[] buffImage;
protected ImageIcon icon = new ImageIcon();
protected int numberOfImages;
protected String filePrefix;
protected String fileExt;
//////////////interactive variables
//image
protected int imageNumber = 0;
public GameObject(int numOfImages, String filePre, String fileE)
{
//if this gives grief about constructors implement a custom initObject() method that can be overridden with super.
this.numberOfImages = numOfImages;
buffImage = new BufferedImage[numOfImages];
filePrefix = filePre;
fileExt = fileE;
}
//Adds images to array
protected void initImageArray()
{
for(int i = 0; i <numberOfImages; i++)
{
try{
buffImage[i] = (BufferedImage) ImageIO.read(new File(filePrefix + "/" + Integer.toString(i) + fileExt));
}
catch(Exception e)
{
System.out.println(e);
}
}
}
//Draws object to screen
public void draw(Graphics g, Component c){
icon.setImage(getNextImage());
icon.paintIcon(c, g, position.x, position.y);
}
//returns current image
protected BufferedImage getNextImage(){
return buffImage[imageNumber];
}
//
protected void increaseImageNumber(){
if(imageNumber < numberOfImages-1){
imageNumber++;
}
else{
imageNumber = 0;
}
}
protected void decreaseimageNumber(){
if(imageNumber > 0){
imageNumber--;
}else{
imageNumber = numberOfImages - 1;
}
}
}
特别是我不认为我做对的一点是将相同的“Graphics g”参数传递给每个对象的绘制方法。它可以工作,但是当我尝试在背景中放置 15 颗星并将它们的 imageIcon 图像从一个缓冲图像数组更改为下一个时,一切都变得非常不和谐。我把它归结为分享这个图形类。也可能只是我们被告知不要使用线程解决方案,但我认为任何新的组件都应该能够处理 17 个图像的更新和更改。更新计时器是每 33 毫秒。
感谢任何可以帮助向我解释实现我所追求的最佳方式或正确使用/共享图形对象的人。