gpt4 book ai didi

java - 我的动画在屏幕上移动太快(图形)(初学者)

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:47 25 4
gpt4 key购买 nike

我正在为学校做一个项目,我选择重新创建 Duck Hunt。到目前为止,一切进展顺利,除了一个问题,飞出的鸭子移动得太快,我将其设置如下,x和y显然是飞行的鸭子的x和y坐标,我有一个循环执行y--。但就像我说的那样,增长得太快了,而且我不能在图形类中使用 double ,只能使用 int。这是我写的代码。

(第一篇文章,我认为我正确地发布了代码,抱歉,如果我没有)

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.awt.TextField;
import java.awt.MouseInfo;
public class duck extends Applet implements ActionListener, MouseListener{

boolean start= true;
int x;
int y=400;
int bx=350;
int by= 285;
int counter=1;
int c=2;// (int) (Math.random()*4)+1;
boolean dog=true;
boolean dog3=false;
boolean bird=false;
public void init(){
}
public void paint(Graphics g){
//BackGround
this.resize (612,574);
g.drawImage(getImage(getCodeBase(), "background.png"), 0, 0, this);
g.drawString("" +c, 10, 300);


//Crosshair Follow
g.drawOval (MouseInfo.getPointerInfo().getLocation().x-24, MouseInfo.getPointerInfo().getLocation().y-63, 50, 50);
g.drawLine (MouseInfo.getPointerInfo().getLocation().x-24, MouseInfo.getPointerInfo().getLocation().y-37, MouseInfo.getPointerInfo().getLocation().x+24, MouseInfo.getPointerInfo().getLocation().y-37);
g.drawLine (MouseInfo.getPointerInfo().getLocation().x, MouseInfo.getPointerInfo().getLocation().y-64, MouseInfo.getPointerInfo().getLocation().x, MouseInfo.getPointerInfo().getLocation().y-15);
g.drawString ("" +MouseInfo.getPointerInfo().getLocation().x +" " +MouseInfo.getPointerInfo().getLocation().y, 100, 100);
//this.repaint();





//Dog
if (dog==true)
g.drawImage(getImage(getCodeBase(), "dog.gif"), x, y, this);
x++;
this.repaint();

if (x>200){
dog=false;
dog3=true;
}

if (y<285){
dog3=false;
//this.repaint();
}

if (dog3==true){
y=y-1;

bird=true;
}

//Bird
if (bird==true ){



//Start Path 1 (Right Then Left at y 100)
if (c==1){
g.drawImage(getImage(getCodeBase(), "birdleft.gif"), bx, by, 75, 75, this);
bx++;
by--;
counter++;

if (by>200){
bx=bx-3;
by--;
}
}
//End Path 1

//Start Path 2
if (c==2){
g.drawImage(getImage(getCodeBase(), "birdleft.gif"), bx-100, by, 75, 75, this);
bx--;
by--;
counter++;

if (by<200){
bx++;
by--;
}
}
//End Path 2


} //End Bird True

} //End Graphics



public void mouseClicked(MouseEvent me) {
//this.repaint();

}
public void mousePressed(MouseEvent me) {}
public void mouseReleased(MouseEvent me) {}
public void mouseEntered(MouseEvent me) {}public void mouseExited(MouseEvent me) {}
public void actionPerformed(ActionEvent e){

}

}

最佳答案

不要通过在绘画方法内调用 repaint() 来设置动画,因为您无法通过这种方式控制动画。相反,要么使用 Swing Timer(它甚至可以在 AWT 程序中工作),要么使用您自己的后台线程 Timer,您都可以设置粗略的帧速率,从而减慢动画速度。

<小时/>

编辑
您的代码的其他问题:

  • 您正在用绘画方法阅读图像。请理解,在动画程序中,需要重复执行很多操作,而且这些操作超出了您的控制范围。绘画必须尽可能快地完成,任何减慢绘画速度的因素都会减慢 GUI 的响应速度。既然在程序启动时读取图像更简单、更高效,为什么要在绘画完成后一直读取图像呢?
  • 您使用的是 AWT,这是一个非常古老且笨重的 GUI 库,15 年前已被 Swing 取代(Swing 本身似乎正在被 JavaFX 取代)。
  • 您正在创建一个小程序,这是一种当今时代很少创建或使用的程序。
  • 您通过在向后的绘画方法中轮询鼠标信息来获取鼠标信息。相反,请使用 MouseListener 和 MouseMotionListener 监听更改。
  • 不要使用 if (something == true)if (someOtherThing == false),因为这很容易出错。相反,只需使用 if (something)if (!someOtherThing)
  • 请记住遵循 Java 命名约定。您的类(class)名称应以大写字母开头,而应以小写字母开头。虽然这似乎是一件微不足道的提示,但编写程序是为了让人类和机器都能理解它们。如果您的代码遵循惯例,其他人(我们和您的导师或老板)将能够更好地理解它并为您提供帮助。
  • 考虑设置光标(如果是 Swing GUI),而不是绘制自己的十字准线。

关于java - 我的动画在屏幕上移动太快(图形)(初学者),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26695904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com