Java 循环后不渲染图像
我最近开始学习Java,并试图制作一个基本的游戏。为了渲染贴图,我配置了两个布尔数组(arr_mapx,arr_mapy),然后使用两个for循环和两个if语句检查它们,以确定它们是否都为真。如果两者都为真,则应渲染图像,但不渲染。我已经成功地在循环外渲染了图像,因此图像变量或文件没有问题Java 循环后不渲染图像,java,graphics2d,Java,Graphics2d,我最近开始学习Java,并试图制作一个基本的游戏。为了渲染贴图,我配置了两个布尔数组(arr_mapx,arr_mapy),然后使用两个for循环和两个if语句检查它们,以确定它们是否都为真。如果两者都为真,则应渲染图像,但不渲染。我已经成功地在循环外渲染了图像,因此图像变量或文件没有问题 public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; g2.drawImage(img_player1, int_pla
public void paint(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
g2.drawImage(img_player1, int_player1_x, int_player1_y, this);
if (map_drawn == false)
{
map_drawn = true;
for(int int_x = 0; int_x < 20; int_x ++)
{
if(arr_mapx[int_x] == true)
{
for(int int_y = 0; int_y < 20; int_y ++)
{
if(arr_mapy[int_y] == true)
{
g2.drawImage(img_obstacle, (int_x + 1)*32, (int_y + 1)*32, this);
//Appears to do nothing
showStatus("It Works!" + int_x + int_y +map_drawn);
//Draws fine, with correct variables
}
}
}
}
}
}
public void绘制(图形g)
{
图形2d g2=(图形2d)g;
g2.绘图图像(img_player1,int_player1_x,int_player1_y,this);
如果(绘制的地图==false)
{
绘制的地图=真;
对于(int_x=0;int_x<20;int_x++)
{
如果(arr_mapx[int_x]==true)
{
for(int_y=0;int_y<20;int_y++)
{
如果(arr_mapy[int_y]==true)
{
g2.绘图图像(img_障碍物,(int_x+1)*32,(int_y+1)*32,本);
//似乎什么也不做
showStatus(“它工作!”+int\ux+int\uy+map\u绘制);
//使用正确的变量绘制精细的图形
}
}
}
}
}
}
我重构了代码以减少嵌套。(请参阅下面的代码块。注意:只需使用文本编辑器,不要期望代码没有bug。)我首先想到的是,map\u draw
从未设置为false
。它只绘制一次,并设置为true,因为map\u drawing
的值在任何地方都不会更改为false
,因此在绘制循环中的任何内容之前,它将在随后的函数条目中退出
很难说应该在哪里改变,因为我们只看到了你比赛的一小部分。在另一个函数中是否有设置绘制的映射值的逻辑
顺便说一句,在绘制处理程序中要小心操作(这就是您在这里工作的内容)。由于函数的行为,像这样的自定义动画很难调试。例如,如果使用调试器停止,然后运行paint函数,则会立即再次触发,因为显示需要更新。我不知道showStatus做什么,但它不应该是一个对话框。它应该记录到控制台或其他地方。您肯定不希望用户与从paint启动的UI交互
祝你好运
public void paint(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
g2.drawImage(img_player1, int_player1_x, int_player1_y, this);
if (map_drawn) return;
map_drawn = true;
for(int int_x = 0; int_x < 20; int_x ++)
{
if(!arr_mapx[int_x]) continue;
for(int int_y = 0; int_y < 20; int_y ++)
{
if(!arr_mapy[int_y]) break;
g2.drawImage(img_obstacle, (int_x + 1)*32, (int_y + 1)*32, this);
//Appears to do nothing
showStatus("It Works!" + int_x + int_y +map_drawn);
//Draws fine, with correct variables
}
}
}
public void绘制(图形g)
{
图形2d g2=(图形2d)g;
g2.绘图图像(img_player1,int_player1_x,int_player1_y,this);
如果(绘制地图)返回;
绘制的地图=真;
对于(int_x=0;int_x<20;int_x++)
{
如果(!arr_mapx[int_x])继续;
for(int_y=0;int_y<20;int_y++)
{
如果(!arr_mapy[int_y])中断;
g2.绘图图像(img_障碍物,(int_x+1)*32,(int_y+1)*32,本);
//似乎什么也不做
showStatus(“它工作!”+int\ux+int\uy+map\u绘制);
//使用正确的变量绘制精细的图形
}
}
}
放入一些调试语句或使用调试器查看发生了什么。在不知道数据是什么的情况下,猜测几乎是不可能的。您是否看到了“it Works!”消息?我看到的是“it Works!”消息包含所有正确的变量。我将研究一些调试。谷歌搜索“java调试指南”可以吗?或者您是否推荐了特定的资源/指南?