请稍等 ...
×

采纳答案成功!

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

正在回答

插入代码

1回答

liuyubobobo 2017-09-30 07:34:05

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


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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号