gpt4 book ai didi

Java贪吃蛇游戏。为什么这个图像被绘制在完全错误的位置

转载 作者:行者123 更新时间:2023-11-29 07:47:16 26 4
gpt4 key购买 nike

我正在用 Java 制作一个简单的贪吃蛇游戏,我想在我的游戏板上使用图像而不是 g.drawOval 作为樱桃。每次加载游戏或吃掉樱桃时,樱桃的位置都会随机生成。

如果我使用 g.fillOval 方法,樱桃每次都会被绘制在正确的位置,但如果我使用图像,樱桃每次都会被绘制在错误的位置。

这是绘制的樱桃的图像,坐标完全相同(我使用点来表示樱桃),但您可以看到位置上的明显差异。

樱桃位置的随机化按预期工作,这是绘制图像的问题

这是我的代码的结果:

enter image description here

红点是 g.fillOval 并且是樱桃的正确位置樱桃图形是我的 g.drawImage 放置樱桃的地方。

上图的 X/Y 是 Cherry X/Y: 49 : 27

这是渲染游戏的代码:

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

import javax.swing.JPanel;


public class Render extends JPanel {


private static final Color BG = new Color(0);
private static final Color SNAKEBODY = new Color(3380564);
private static final Color SNAKEHEAD = new Color(16724736);

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(BG);
g.fillRect(0, 0, 800, 700);
Snake snake = Snake.snake;
g.setColor(SNAKEBODY);
for (Point point : snake.snakeParts) {
g.fillOval(point.x * Snake.SCALE, point.y * Snake.SCALE,
Snake.SCALE, Snake.SCALE);
}
g.setColor(SNAKEHEAD);
g.fillOval(snake.head.x * Snake.SCALE, snake.head.y * Snake.SCALE,
Snake.SCALE, Snake.SCALE);
g.setColor(Color.RED);

g.drawImage(snake.cherryImg, snake.cherry.x, snake.cherry.y, snake.cherryImg.getWidth(null), snake.cherryImg.getHeight(null), null);
g.fillOval(snake.cherry.x * 10, snake.cherry.y * 10,10, 10);
//debug line
System.out.println("Cherry X/Y: " + snake.cherry.x + " : " + snake.cherry.y);

String string = "Score: " + snake.score + ", Length: "
+ snake.snakeSize;
g.setColor(Color.white);
//simple math to center ish text.
g.drawString(string, (int) (getWidth() / 2 - string.length() * 2.5f),
10);
string = "Game Over!";
if (snake.over){
g.drawString(string,
(int) (getWidth() / 2 - string.length() * 2.5f),
(int) snake.dim.getHeight() / 4);
}
string = "Paused!";
{
if (snake.paused && !snake.over){
g.drawString(string,
(int) (getWidth() / 2 - string.length() * 2.5f),
(int) snake.dim.getHeight() / 4);
}
}
}
}

andy body 能看出为什么在这些线条上的绘图存在差异吗:

g.drawImage(snake.cherryImg, snake.cherry.x,  snake.cherry.y,snake.cherryImg.getWidth(null), snake.cherryImg.getHeight(null), null);
g.fillOval(snake.cherry.x * 10, snake.cherry.y * 10, 10, 10);
//debug line
System.out.println("Cherry X/Y: " + snake.cherry.x + " : " + snake.cherry.y);

最佳答案

看看你的两个职位。

您的填充椭圆发生在 snake.cherry.x*10 而图像绘制在 snake.cherry.x (Y 相同)

这就是为什么图像在 49,27 而点在 490,270

关于Java贪吃蛇游戏。为什么这个图像被绘制在完全错误的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24559981/

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