我最近开始学习Java并且正在尝试制作基本游戏。为了渲染地图,我配置了两个布尔数组(arr_mapx,arr_mapy),然后使用两个for循环和两个if语句检查它们,以确定两者是否都为真。如果两者都为真,则图像应该渲染,但事实并非如此。我已成功在循环外渲染图像,因此对图像变量或文件没有问题。
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
}
}
}
}
}
}
答案 0 :(得分:0)
我重构了代码以减少嵌套。 (请参阅下面的代码块。警告:只使用文本编辑器,所以不要指望无错误的代码。)首先突然出现的是map_drawn
永远不会设置为false
。它绘制一次并设置为true,并在随后的条目中输入您在循环中绘制任何内容之前退出的函数,因为map_drawn
的值从未在任何地方更改为false
。
很难说它应该改变的地方,因为我们只看到你游戏的一小部分。另一个函数中是否有逻辑来设置map_drawn
的值?
顺便说一句,要小心你在油漆处理程序中做了什么(这就是你在这里工作的)。由于函数的行为,像这样的自定义动画很难调试。例如,如果您使用调试器停在其中然后运行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
}
}
}