产生多个圆圈并使它们移动
Spawning mutiple circles and make them move
我正在尝试自学 java 我 "try" 编写一个小游戏。
我有一个问题,我想解决方案很简单,但我很挣扎。
基本的想法是我正在控制一个圆圈,我想每 5 秒在 window 范围内的随机位置生成一个圆圈。圆圈应该移动到我控制的圆圈的位置。
这是我目前的情况:
Window-Class:
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-Class:
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){}
}
我知道这没什么特别的,但我正在努力研究如何创建和生成 "enemy"-circles 以及如何控制每个创建的圆圈的 x/y 值以朝着可控方向移动圆.
感谢任何形式的帮助。
注意 在游戏中使用 thread.sleep
不是 一个好主意。这是每秒迭代 60 次的游戏循环示例。
public void run() {
double ns = 1000000000.0 / 60.0;
double delta = 0;
long lastTime = System.nanoTime();
while (running) {
long now = System.nanoTime();
delta += (now - lastTime) / ns;
lastTime = now;
while (delta >= 1) {
tick();
delta--;
}
}
}
然后您需要将控制游戏的代码移动到 tick()
方法中。 (或同等学历)
private void tick() {
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();
}
回答 我会制作一个新的 class 包含你的敌人的信息。它需要一个带有 int
x
和 int
y
以及 tick()
方法的构造函数。
public class Enemy {
public enemy(int x, int y) {
this.x = x;
this.y = y;
}
public void tick() {
}
}
然后你可以在 GameIntern
class
中创建一个包含你的敌人的 ArrayList
private static ArrayList<Enemy> enemies = new ArrayList<Enemy>();
这让你可以拥有任意数量的敌人。您将需要通过使用 for
循环调用他们所有的 tick()
方法来更新敌人。 GameIntern
中的tick()
方法需要添加以下内容
for (Enemy e : enemies) {
e.tick();
}
要每 5 秒在屏幕内的随机位置添加一个敌人,您需要 int
delay
。 GameIntern
中的tick()
方法添加了以下内容
private int delay;
private Random random= new Random();
private void tick() {
delay++;
if(delay % (60 * 5) == 0)
enemies.add(new Enemy(random.nextInt(your game width), random.nextInt(your game height));
为了让敌人追你,在 Enemy
中将此添加到你的 tick()
方法中
if (x < GameIntern.x) x++;
if (x > GameIntern.x) x--;
if (y < GameIntern.y) y++;
if (y > GameIntern.y) y--;
有关移除敌人的信息,请参阅
我正在尝试自学 java 我 "try" 编写一个小游戏。
我有一个问题,我想解决方案很简单,但我很挣扎。
基本的想法是我正在控制一个圆圈,我想每 5 秒在 window 范围内的随机位置生成一个圆圈。圆圈应该移动到我控制的圆圈的位置。
这是我目前的情况:
Window-Class:
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-Class:
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){}
}
我知道这没什么特别的,但我正在努力研究如何创建和生成 "enemy"-circles 以及如何控制每个创建的圆圈的 x/y 值以朝着可控方向移动圆.
感谢任何形式的帮助。
注意 在游戏中使用 thread.sleep
不是 一个好主意。这是每秒迭代 60 次的游戏循环示例。
public void run() {
double ns = 1000000000.0 / 60.0;
double delta = 0;
long lastTime = System.nanoTime();
while (running) {
long now = System.nanoTime();
delta += (now - lastTime) / ns;
lastTime = now;
while (delta >= 1) {
tick();
delta--;
}
}
}
然后您需要将控制游戏的代码移动到 tick()
方法中。 (或同等学历)
private void tick() {
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();
}
回答 我会制作一个新的 class 包含你的敌人的信息。它需要一个带有 int
x
和 int
y
以及 tick()
方法的构造函数。
public class Enemy {
public enemy(int x, int y) {
this.x = x;
this.y = y;
}
public void tick() {
}
}
然后你可以在 GameIntern
class
ArrayList
private static ArrayList<Enemy> enemies = new ArrayList<Enemy>();
这让你可以拥有任意数量的敌人。您将需要通过使用 for
循环调用他们所有的 tick()
方法来更新敌人。 GameIntern
tick()
方法需要添加以下内容
for (Enemy e : enemies) {
e.tick();
}
要每 5 秒在屏幕内的随机位置添加一个敌人,您需要 int
delay
。 GameIntern
tick()
方法添加了以下内容
private int delay;
private Random random= new Random();
private void tick() {
delay++;
if(delay % (60 * 5) == 0)
enemies.add(new Enemy(random.nextInt(your game width), random.nextInt(your game height));
为了让敌人追你,在 Enemy
中将此添加到你的tick()
方法中
if (x < GameIntern.x) x++;
if (x > GameIntern.x) x--;
if (y < GameIntern.y) y++;
if (y > GameIntern.y) y--;
有关移除敌人的信息,请参阅