gpt4 book ai didi

Java 游戏 - 未知错误

转载 作者:行者123 更新时间:2023-11-30 07:51:13 27 4
gpt4 key购买 nike

每次我尝试启动它时都会出现错误,它会出现一个空白窗口和这些错误消息。

Exception in thread "Thread-2" java.lang.IllegalArgumentException: Color parameter outside of expected range: Red Green
at java.awt.Color.testColorValueRange(Unknown Source)
at java.awt.Color.<init>(Unknown Source)
at java.awt.Color.<init>(Unknown Source)
at java.awt.Color.<init>(Unknown Source)
at com.tutorial.main.HUD.render(HUD.java:32)
at com.tutorial.main.Game.render(Game.java:118)
at com.tutorial.main.Game.run(Game.java:85)
at java.lang.Thread.run(Unknown Source)

我怀疑这与渲染有关,但不确定有人可以帮忙。

我插入了以下代码:

  • 游戏
  • 窗口
  • 聪明的敌人
  • HUD
  • 身份证
  • 处理程序
package com.tutorial.main;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.util.Random;

public class Game extends Canvas implements Runnable {

private static final long serialVersionUID = 7580815534084638412L;

public static final int WIDTH = 640, HEIGHT = WIDTH / 12 * 9;

private Thread thread;
private boolean running = true;


private Random r;
private Handler handler;
private HUD hud;
private Spawn spawner;


public Game() {
new Window(WIDTH, HEIGHT, "Lets Build a Game!", this);

handler = new Handler();
hud = new HUD();
spawner = new Spawn(handler, hud);



this.addKeyListener(new KeyInput(handler));


r = new Random();

// for(int i = 0; i <1; i++){

//implementing Player1
handler.addObject(new Player(WIDTH / 2 - 32, HEIGHT / 2 - 32, ID.Player, handler));
handler.addObject(new BasicEnemy(r.nextInt(Game.WIDTH), r.nextInt(Game.HEIGHT), ID.BasicEnemy, handler));

//implementing Player2
//handler.addObject(new Player(WIDTH/2-32, HEIGHT/2+64, ID.Player2));
/*for (int i = 0; i < 1; i++){
//implementing BasicEnemy
handler.addObject(new BasicEnemy(r.nextInt(WIDTH), r.nextInt(HEIGHT), ID.BasicEnemy, handler));
}*/

}

public synchronized void start() {
thread = new Thread(this);
thread.start();
}

public synchronized void stop() {
try {
thread.join();
running = false;
} catch (Exception e) {
e.printStackTrace();
}
}

public void run() {
this.requestFocus();
long lastTime = System.nanoTime();
double amountOfTicks = 60.0;
double ns = 1000000000 / amountOfTicks;
double delta = 0;
long timer = System.currentTimeMillis();
int frames = 0;
while (running) {
long now = System.nanoTime();
delta += (now - lastTime) / ns;
lastTime = now;
while (delta >= 1) {
tick();
delta--;
}
if (running) {
render();
frames++;

if (System.currentTimeMillis() - timer > 1000) {
timer += 1000;
//System.out.println("FPS: " + frames);
frames = 0;
}
}

}
}

private void tick() {
handler.tick();
hud.tick();
spawner.tick();
}

private void render() {
BufferStrategy bs = this.getBufferStrategy();
if (bs == null) {
this.createBufferStrategy(3);
return;
}

Graphics g = bs.getDrawGraphics();

g.setColor(Color.BLACK);
g.fillRect(0, 0, WIDTH, HEIGHT);


handler.render(g);
hud.render(g);


g.dispose();
bs.show();
}


public static float clamp(float
var, float min, float max) {
if (var >= max) {
return var = max;

} else if (var <= min) {
return var = min;
} else {
return var;
}
}

public static void main(String args[]) {
Game game = new Game();
game.start();
}
}
package com.tutorial.main;

import java.awt.Canvas;
import javax.swing.*;
import java.awt.Dimension;

public class Window extends Canvas {

private static final long serialVersionUID = -240840600533728354L;

public Window(int width, int height, String title, Game game) {
JFrame frame = new JFrame(title);

frame.setPreferredSize(new Dimension(width, height));
frame.setMinimumSize(new Dimension(width, height));
frame.setMaximumSize(new Dimension(width, height));

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.add(game);
frame.setVisible(true);

}

}
package com.tutorial.main;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;

public class SmartEnemy extends GameObject{

private Handler handler;
private GameObject player;

public SmartEnemy(int x, int y, ID id, Handler handler) {
super(x, y, id);
this.handler = handler;

for(int i = 0; i < handler.object.size(); i++){
if(handler.object.get(i).getId() == ID.Player) player = handler.object.get(i);
}


}


public Rectangle getBounds(){
return new Rectangle((int)x, (int)y, 32, 32);
}

public void tick() {
handler.addObject(new Trail(x, y,ID.Trail, Color.GREEN, 16, 16, 0.02f, handler));

x += velX;
y += velY;

float diffX = x - player.getX() - 8;
float diffY = y - player.getY() - 8;
float distance = (float) Math.sqrt((x - player.getX()) * (x - player.getX()) + (y - player.getY()) * (y - player.getY()));

velX = (float) ((-1.0/distance) * diffX);
velY = (float) ((-1.0/distance) * diffY);

if (y <= 0 || y >= Game.HEIGHT - 37) velY *= -1;
if (x <= 0 || x >= Game.WIDTH - 16) velX*= -1;


}

public void render(Graphics g) {
g.setColor(Color.GREEN);
g.fillRect((int)x, (int)y, 16, 16);

}

}
package com.tutorial.main;

import java.awt.Graphics;
import java.util.LinkedList;

public class Handler {


LinkedList < GameObject > object = new LinkedList < GameObject > ();

public void tick() {
for (int i = 0; i < object.size(); i++) {
GameObject tempObject = object.get(i);
tempObject.tick();
}
};
public void render(Graphics g) {
for (int i = 0; i < object.size(); i++) {
GameObject tempObject = object.get(i);

tempObject.render(g);
}

}

public void addObject(GameObject object) {
this.object.add(object);
}

public void removeObject(GameObject object) {
this.object.remove(object);
}
}
package com.tutorial.main;

import java.awt.Color;
import java.awt.Graphics;

public class HUD {

public static float HEALTH = 100;

private float greenValue = 255;


private int level = 1;
private float score = 0;

public void tick(){
HEALTH = Game.clamp(HEALTH, 0, 100);



greenValue = Game.clamp(greenValue, 0, 255);
greenValue = HEALTH*2;


score++;
}
public void render(Graphics g){
//Background for Health bar
g.setColor(Color.gray);
g.fillRect(15, 15, 200, 32);
//Health Bar
g.setColor(new Color(75, (float) greenValue, 0));
g.fillRect(15, 15, (int) (HEALTH * 2), 32);
g.setColor(Color.WHITE);
g.drawRect(15, 15, 200, 32);

g.drawString("Score: " + score, 15, 60);
g.drawString("Level: " + level, 15, 75);
}
/*int level = 1, point = 0;
//point scoring system
for(int i = 2; i > 1; i++){
if(HEALTH > 0){
point++;
System.out.println(point);
}
}
}*/



private void score(float score){
this.score = score;
}


public float getScore(){
return score;
}


public int getLevel(){
return level;
}


public void setLevel(int level){
this.level = level;
}
}
package com.tutorial.main;

import java.awt.Graphics;
import java.awt.Rectangle;

public abstract class GameObject {

protected float x, y;
protected ID id;
protected float velX, velY;


public GameObject(float x, float y, ID id){

this.x = x;
this.y = y;
this.id = id;

}



public abstract void tick();


public abstract void render(Graphics g);


public abstract Rectangle getBounds();
public void setX(int x){
this.x = x;
}

public void setY(int y){
this.y = y;
}

public int getX(){
return (int) x;
}

public int getY(){
return (int) y;
}

public void setId(ID id){
this.id = id;
}

public ID getId(){
return id;
}

public void setVelX(int velX){
this.velX = velX;
}

public void setVelY(int velY){
this.velY = velY;
}

public float getVelX(){
return velX;
}

public float getVelY(){
return velY;
}

}

最佳答案

异常是由这个构造函数调用引起的:

 new Color(75, (float) greenValue, 0)

您使用 Color(float, float, float) ,因为第二个参数的类型为 float。如 javadoc 中所述,此构造函数采用 3 个代表 RGB 分量的浮点型。范围是从 0.0f1.0f,而不是从 0255,这就是您收到错误的原因(75 太大)。

看来您不应该强制转换第二个参数来使该语句使用 Color(int, int, int) 构造函数。

关于Java 游戏 - 未知错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33318327/

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