gpt4 book ai didi

java - 我正在尝试使用 java applet 开发游戏,球的运动会停止我的整个游戏吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:16:56 24 4
gpt4 key购买 nike

这只是游戏的开始,这里有两个方 block ,一个可以用方向键控制,一个可以用鼠标控制,它们可以互相发射球,同时可以保存,命中最多的一方获胜...在这段代码中,当我从第二个方 block 开火时,有一条长线朝向第二个玩家,整个游戏必须停止..

package raship;

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

import java.io.IOException;

public class raship extends Applet implements KeyListener, MouseMotionListener, MouseListener, Runnable
{

int width,flag1=0,flag2=0,height,x1,y1,x2,y2,calc1,calc2x,calc2y;

Thread t=null;

public void init()

{
//Toolkit toolkit=Toolkit.getDefaultToolkit();
t=new Thread();
width=getSize().width;
height=getSize().height;
x1=0;y1=height/2;
x2=width-10;y2=height/2;
addMouseListener(this);
addMouseMotionListener(this);
addKeyListener(this);
setBackground(Color.gray);
repaint();
}
public void keyPressed(KeyEvent e)
{
int c=e.getKeyCode();
System.out.println(c);
if(c==KeyEvent.VK_LEFT)
{
System.out.println("yeah it's on");
x1-=10;
}
else if(c==KeyEvent.VK_UP)
y1-=10;
else if(c==KeyEvent.VK_RIGHT)
x1+=10;
else if(c==KeyEvent.VK_DOWN)
y1+=10;
if(x1>=0 && y1>=0 && y1<=height-20 && x1<=3*width/4)
repaint();
}
public void keyReleased(KeyEvent arg0) {

}
public void keyTyped(KeyEvent arg0) {

}
public void mouseDragged(MouseEvent e) {

}
public void mouseMoved(MouseEvent e)
{
x2=e.getX();
y2=e.getY();
if(x2>=5*width/8 && x2<=width-20)
repaint();
}
public void mouseClicked(MouseEvent e)
{
flag2=1;
calc2x=x2;
calc2y=y2;
System.out.println(calc2x);
}
public void mouseEntered(MouseEvent arg0) {

}
public void mouseExited(MouseEvent arg0) {

}
public void mousePressed(MouseEvent arg0) {

}
public void mouseReleased(MouseEvent arg0) {

}
public void paint(Graphics g)
{
width=getSize().width;
height=getSize().height;
g.setColor(Color.green);
g.fillRect(x1, y1, 20, 20);
g.setColor(Color.red);
g.fillRect(x2, y2, 20, 20);
if(flag2==1)
{
g.setColor(Color.yellow);
while(true)
{
calc2x-=1;
System.out.println(calc2x);
g.fillOval(calc2x,calc2y,10,10);
try {
Thread.sleep(4);
} catch (InterruptedException e) {e.printStackTrace();}
if(calc2x<10)
{
flag2=0;
break;
}
}
}
}
@SuppressWarnings("static-access")
public void run()
{
if(flag2==1)
while(true)
{
{
repaint();
System.out.println("calc2x="+calc2x);
if(calc2x<10)
{
flag2=0;
}
try
{
t.sleep(4);
} catch (InterruptedException e) {e.printStackTrace();}
calc2x-=1;
}
}
}
}

最佳答案

从不 在绘制方法中有 Thread.sleep(...)。曾经。这会使您的所有绘图进入 hibernate 状态。事实上,只需在 GUI 线程中调用 Thread.sleep(...) 就足以让 GUI 进入 hibernate 状态,但更糟糕的是在 paint 方法中,因为必须反复调用该方法结束,并且需要在眨眼或更短的时间内快速结束。

相反:

  • 创建 Swing JApplet,而不是 AWT Applet
  • 覆盖 JPanel 的 paintComponent 方法来进行绘图
  • 使用 Swing Timer 进行游戏循环。

编辑
您在评论中声明:

@HovercraftFullOfEels if you can write the syntax of swing timer and swing applet it would be of great help....

您似乎希望我为您编写教程。我希望我一直有时间这样做,但是,唉,我没有,而且我觉得如果你和我一起检查已经存在的带有示例代码的体面教程,效率会更高只等你学习。例如,请查看以下链接:

关于java - 我正在尝试使用 java applet 开发游戏,球的运动会停止我的整个游戏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18709685/

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