lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 10236|回复: 7
打印 上一主题 下一主题

根据您书上网络坦克大战的做了修改,有些碰撞检测的问题

[复制链接]

1

主题

0

好友

23

积分

士兵

Rank: 1

跳转到指定楼层
楼主
发表于 2014-5-22 20:59:10 |只看该作者 |倒序浏览
添加地图之后,如何实现坦克和地图的碰撞呢,我添加了另外一个mapdata[][],如果mapdata[][]==1的话就停止移动,这样却没有作用,我想请教您一下如何进行坦克和bitmap的碰撞
            bitmapdata = new LBitmapData(imglist["map"]);  
            imageArray = LGlobal.divideCoordinate(bitmapdata.image.width,bitmapdata.image.height,10,10);
            for(i=0;i<20;i++){  
                for(j=0;j<20;j++){   
                index = map[i][j];   
                indexY = Math.floor(index /10);   
                indexX = index - indexY*10;
               bitmapdata = new LBitmapData(imglist["map"],indexX*32,indexY*32,32,32);  
               bitmap = new LBitmap(bitmapdata);  
              bitmap.x = j*32;  
              bitmap.y = i*32;     
              backLayer.addChild(bitmap);  
                                             }  
                                     }  




QQ图片20140522205807.jpg (142.11 KB, 下载次数: 1753)

QQ图片20140522205807.jpg

回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

沙发
发表于 2014-5-23 08:25:38 |只看该作者
你的代码只是添加地图部分吧,你控制坦克行走的代码不发除了我也不知道你哪里写错了啊
不回答与技术和引擎不相关的问题
回复

使用道具 举报

1

主题

0

好友

23

积分

士兵

Rank: 1

板凳
发表于 2014-5-23 10:57:53 |只看该作者
lufy 发表于 2014-5-23 08:25
你的代码只是添加地图部分吧,你控制坦克行走的代码不发除了我也不知道你哪里写错了啊 ...

行走部分的代码贴下面了,您看看
回复

使用道具 举报

1

主题

0

好友

23

积分

士兵

Rank: 1

地板
发表于 2014-5-23 10:58:43 |只看该作者
Tank.prototype.move = function() {
                                var self = this;
                                if(self.x == self.targetX && self.y == self.targetY)return;
                                if(self.moveX != 0){
                                        self.x += self.moveX;
                                         if(mapdata[self.x/32][self.y/32]==1){self.x -=self.moveX;}
                                        if(self.x == self.targetX){
                                                self.moveX = 0;
                                                self.moveY = self.y > self.targetY ? -1 : 1;
                                        }
                                }else if(self.moveY != 0){
                                        self.y += self.moveY;
                                        if(mapdata[self.x/32][self.y/32]==1){self.y -=self.moveY;}
                                        if(self.y == self.targetY){
                                                self.moveY = 0;
                                                self.moveX = self.x > self.targetX ? -1 : 1;
                                        }
                                }else{
                                        if(self.x == self.targetX){
                                                self.moveY = self.y > self.targetY ? -1 : 1;
                                        }else if(self.y == self.targetY){
                                                self.moveX = self.x > self.targetX ? -1 : 1;
                                        }else if(Math.random() > 0.5){
                                                self.moveX = self.x > self.targetX ? -1 : 1;
                                        }else{
                                                self.moveY = self.y > self.targetY ? -1 : 1;
                                        }
                                }
                        }
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

5#
发表于 2014-5-23 23:14:12 |只看该作者
陈铭 发表于 2014-5-23 10:58
Tank.prototype.move = function() {
                                var self = this;
                                if(self.x == self.targetX && self.y == s ...

坦克的移动,不能单纯的通过move来控制
目前书里的做法,因为没有地图,所以将鼠标点击的位置发送给了服务器了,然后服务器告诉其他用户,这个坦克要移动到哪里
如果你要通过地图来限制坦克的移动的话,你需要自己设计一套寻路算法,或者A*,或者广度算法,或者深度算法,等等吧。
来控制坦克的移动路线。
鼠标点击地图的时候,先判断坦克是否可以移动到那里,如果可以,则报告给服务器,服务器广播给所有用户,如果你的算法最后决定的路线是一样的,那么所有人在他们的本地看到的那个坦克的行走路线也就是一样的。
流程是这么个流程,具体寻路算法,你可以自己查一查相关资料
或者我博客中有关于A星算法的原理介绍,和js的实现
http://blog.csdn.net/lufy_legend/article/details/5733733
http://blog.csdn.net/lufy_legend/article/details/9404147
你可以参考一下
不回答与技术和引擎不相关的问题
回复

使用道具 举报

1

主题

0

好友

23

积分

士兵

Rank: 1

6#
发表于 2014-5-25 14:25:27 |只看该作者
lufy 发表于 2014-5-23 23:14
坦克的移动,不能单纯的通过move来控制
目前书里的做法,因为没有地图,所以将鼠标点击的位置发送给了服 ...

您好,寻找路径的功能实现了,现在子弹与地图上的蓝色块的碰撞怎么实现呢?使用这个函数么?LGlobal.hitTestArc(),还是用mapdata[][]=1来检测呢

Bullet.prototype.onframe = function() {
                                var self = this;
                                if(self.isdie)return;
                                self.x += self.mx;
                                self.y += self.my;
                                if(self.x < 0 || self.x > LGlobal.width || self.y < 0 || self.y > LGlobal.height){
                                        self.isdie = true;
                                        return;
                                }
                            var tank;
                                for(j=0;j<tanklist.length;j++){
                                        tank = tanklist[j];
                                        if(tank.name != self.name && LGlobal.hitTestArc(self,tank)){
                                                self.isdie = true;
                                                socket.send("type=kill&name="+tank.name);
                                                break;
                                        }
                                }
                        }
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

7#
发表于 2014-5-25 19:55:03 |只看该作者
陈铭 发表于 2014-5-25 14:25
您好,寻找路径的功能实现了,现在子弹与地图上的蓝色块的碰撞怎么实现呢?使用这个函数么?LGlobal.hitT ...

可以在这个函数中判断。
两种方式都是可以的,但是,既然你的地图已经是设定好的,那么直接判断子弹的所在位置的地形,应该就是你说的mapdata,这样的话效率会更高
不回答与技术和引擎不相关的问题
回复

使用道具 举报

1

主题

0

好友

23

积分

士兵

Rank: 1

8#
发表于 2014-5-26 09:11:43 |只看该作者
lufy 发表于 2014-5-25 19:55
可以在这个函数中判断。
两种方式都是可以的,但是,既然你的地图已经是设定好的,那么直接判断子弹的所 ...

非常感谢您,完成啦,么么哒
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2024-5-5 03:49 , Processed in 0.054556 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部