我想教自己java和我“尝试”编码一个小游戏。产生多圈并使它们移动
我有一个问题,我想解决方案很简单,但我很挣扎。
其基本思想是我控制一个圆圈,并且我想每隔5秒在我的窗口边界内随机位置产生一个圆圈。圈子应该将towords移动到我控制的圈子的位置。
这是我到目前为止有:
窗口级:
package TestGame;
import java.awt.Graphics;
public class Window extends GameIntern{
public void init(){
setSize(854,480);
Thread th = new Thread(this);
th.start();
offscreen = createImage(854,480);
d = offscreen.getGraphics();
addKeyListener(this);
}
public void paint(Graphics g){
d.clearRect(0,0,854,480);
d.drawOval(x, y, 20, 20);
g.drawImage(offscreen,0,0,this);
}
public void update(Graphics g){
paint(g);
}
}
GameIntern级:
package TestGame;
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class GameIntern extends Applet implements Runnable , KeyListener {
public int x,y;
public Image offscreen;
public Graphics d;
public boolean up,down,left,right;
public void run() {
x = 100;
y = 100;
while(true){
if(left == true){
if(x>=4){
x-=4;
}else{ x=0;}
repaint();
}
if(right == true){
if(x<=826){
x+=4;
}else{ x=830;}
repaint();
}
if(up == true){
if(y>=4){
y-=4;
}else{ y=0;}
repaint();
}
if(down == true){
if(y<=454){
y+=4;
}else{y=459;}
repaint();
}
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == 37){
left=true;
}
if(e.getKeyCode() == 38){
up=true;
}
if(e.getKeyCode() == 39){
right=true;
}
if(e.getKeyCode() == 40){
down=true;
}
}
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == 37){
left=false;
}
if(e.getKeyCode() == 38){
up=false;
}
if(e.getKeyCode() == 39){
right=false;
}
if(e.getKeyCode() == 40){
down=false;
}
}
public void keyTyped(KeyEvent e){}
}
我知道这是没有任何幻想,但我与如何挣扎创造并产生“敌人” - 圈以及如何控制每一个创建的圈的x/y值向可控圈移动。
任何形式的帮助表示赞赏。
非常感谢Caleb。我明白你写的所有东西:) 我仍然有两个问题,我不知道你能否给我一个答案。 1.你在哪里使用变量'timer'? 2.当我移动可控圆时,屏幕基本上只会更新。有没有办法更新每20毫秒的窗口而不必移动? – ViktorG
另一件事是'if(delay%60 * 5 == 0)'部分似乎不安静正确。我在很短的时间内产卵了许多圈子。 – ViktorG
我只是将'repaint()'方法移动到tick方法的顶部,因此它每16.6毫秒发生一次。延迟通过在(60 * 5)周围添加括号并确保添加'delay ++;'来确定。计时器变量是未显示的fps计数器的一部分。 –