我正在尝试使用JavaApplet开发一个游戏,球的运动会停止整个游戏?
这只是游戏的开始,其中有两个方块,一个可以用箭头键控制,另一个可以用鼠标控制,它们可以相互发射球,同时可以被保存,命中率最高的方块将获胜。。。 在这段代码中,当我从第二个广场开火时,有一条长线朝着第二个玩家走去,整个游戏必须停止我正在尝试使用JavaApplet开发一个游戏,球的运动会停止整个游戏?,java,applet,thread-safety,awt,Java,Applet,Thread Safety,Awt,这只是游戏的开始,其中有两个方块,一个可以用箭头键控制,另一个可以用鼠标控制,它们可以相互发射球,同时可以被保存,命中率最高的方块将获胜。。。 在这段代码中,当我从第二个广场开火时,有一条长线朝着第二个玩家走去,整个游戏必须停止 package raship; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.io.IOException; public class raship
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;
}
}
}
}
package-raship;
导入java.awt.*;
导入java.awt.event.*;
导入java.applet.*;
导入java.io.IOException;
公共类raship扩展小程序实现KeyListener、MouseMotionListener、MouseStener、Runnable
{
整数宽度,flag1=0,flag2=0,高度,x1,y1,x2,y2,calc1,calc2x,calc2y;
线程t=null;
公共void init()
{
//Toolkit=Toolkit.getDefaultToolkit();
t=新螺纹();
宽度=getSize().width;
高度=getSize()。高度;
x1=0;y1=高度/2;
x2=宽度-10;y2=高度/2;
addMouseListener(这个);
addMouseMotionListener(此);
addKeyListener(此);
挫折背景(颜色:灰色);
重新油漆();
}
按下公共无效键(按键事件e)
{
int c=e.getKeyCode();
系统输出打印ln(c);
if(c==KeyEvent.VK_左)
{
System.out.println(“是的,它是开着的”);
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;
如果(x1>=0&&y1>=0&&y1从不在绘制方法中使用Thread.sleep(…)
。这会使所有绘图处于休眠状态。实际上,只需调用Thread.sleep(…)
在GUI线程中足以使GUI进入睡眠状态,但在绘制方法中更糟糕,因为该方法必须反复调用,并且需要在眨眼或更短的时间内快速重复调用
相反:
- 创建Swing JApplet,而不是AWT小程序
- 重写JPanel的paintComponent方法以进行绘图
- 使用挥杆计时器进行游戏循环。
编辑
您在评论中声明:
@如果你能写出swing定时器和swing小程序的语法,那将非常有帮助
您似乎希望我为您编写教程。我希望我有所有的时间来这样做,但是,唉,我没有,而且我觉得您和我都可以更有效地查看包含示例代码的体面教程,这些示例代码已经存在,正等着您学习。例如,请查看以下内容链接:
+1似乎非常模糊,你甚至需要一个线程。睡眠(…)
在一种绘画方法中,因为它严格用于绘画。而且,while
循环似乎也有点奇怪。因为我是java小程序的新手,对此不太了解…实际上我想在这段代码中生成多个移动球…这将通过单击鼠标来实现…如果可能的话请提前帮助…thanx。!!@aka_007:对于具体的答案,您需要提出具体的问题。@HovercraftFullOfEels如果您能编写swing定时器和swing小程序的语法,将非常有帮助。@HovercraftFullOfEels-okae-thanx!!