Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环后不渲染图像_Java_Graphics2d - Fatal编程技术网

Java 循环后不渲染图像

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

我最近开始学习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
                    }
                }
            }
        }
    }
}
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调试指南”可以吗?或者您是否推荐了特定的资源/指南?