请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答

1回答

liuyubobobo 2017-09-30 07:34:05

如果采用我的代码结构,耐心等待绘制的最终完成,应该也是一条通路的。只不过联通会在最后发生,因为相当于是使用了后序遍历,先通过go去遍历,最后才将当前节点和访问的下一个节点之间的通路打通。


如果你的代码在最终绘制不是联通的,应该是你的draw的位置有问题。draw应该发生在你的map修改以后。我看你的代码draw发生在每次go调用中,这是不合适的。go只是一个逻辑过程。而draw其实是显示反映数据的变化,应该是绘制数据一旦发生变化(你的代码中map一旦发生变化),就进行draw操作。试试看:)


另外,为了保险起见,在整个动画逻辑完成以后也应该执行一下draw:)请再体会一下我的代码逻辑,注意我加注释的部分。

private void run(){
    // 在动画逻辑开始之前,先绘制一遍初始状态
    setData(-1, -1);  
    
    // 动画逻辑
    go(data.getEntranceX(), data.getEntranceY()+1); 
    
    // 在动画逻辑之后,绘制一遍最终状态,虽然在一些情况下是多余的:) 
    setData(-1, -1);  
}

private void go(int x, int y){
    if(!data.inArea(x,y))
        throw new IllegalArgumentException("x,y are out of index in go function!");
    
    data.visited[x][y] = true;
    for(int i = 0 ; i < 4 ; i ++){
        int newX = x + d[i][0]*2;
        int newY = y + d[i][1]*2;
        if(data.inArea(newX, newY) && !data.visited[newX][newY]){
            // setData是修改数据,同时绘制!这两个动作绑定在一起!
            // 每次显示数据一发生修改,说明我们的画面要产生变化,就进行一次绘制:)
            setData(x + d[i][0], y + d[i][1]);
            
            // 之后继续根据我们的逻辑遍历相关节点
            go(newX, newY);
        }
    }
}




1 回复 有任何疑惑可以回复我~
  • 提问者 甲骨文_0001 #1
    谢谢 应该是我的draw没在最后map改变后绘制,其实map数据已经迷宫生成了 感谢波波老师的提示(^ ^)
    回复 有任何疑惑可以回复我~ 2017-09-30 08:30:27
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信