(2011-05-12 旧博文搬家)BOX2D_坦克大战

news/2025/2/19 3:46:57/

初学BOX2D,做了一个简单小游戏 像以前玩的疯狂坦克 键盘控制 改变力度和角度射击 吧所有砖头炸出灰色区域就赢了


BOX2D的2.1版加入了爆炸效果,但是2.02版没有,所以我用的方法是以爆炸点为中心建立一个AABB区域,获得处于这个区域内的缸体,

根据中心点到这些缸体的向量决定赋予其i受力的大小和方向。

 

function BombAtArea(areaCenter:b2Vec2):void {

    var aabb:b2AABB=new b2AABB  ;
    aabb.lowerBound.Set(areaCenter.x-5,areaCenter.y-5);
    aabb.upperBound.Set(areaCenter.x+5,areaCenter.y+5);   //建立一个以爆炸点为中心的区域
    var k_maxCount:int=16;   

    var shapes:Array=new Array  ;//用来保存检测到的刚体的数组
    var count:int=myWorld.Query(aabb,shapes,k_maxCount);
    var body:b2Body=null;
    var powerInX:Number;
    var powerInY:Number;
    var line:Number;
    for (var i:int=0; i<count; ++i) {        // 遍历刚体
        if (shapes[i].GetBody().IsStatic()==false&&shapes[i].GetBody()!=cannonBomb) {  //该刚体不能是静态的或者炮弹本身
      var tShape:b2Shape=shapes[i] as b2Shape;
      body=tShape.GetBody();


      line=(cannonBomb.GetLocalPoint(body.GetWorldCenter()).x*cannonBomb.GetLocalPoint(body.GetWorldCenter()).x+cannonBomb.GetLocalPoint(body.GetWorldCenter()).y*cannonBomb.GetLocalPoint(body.GetWorldCenter()).y);
      line=Math.sqrt(line);

//用勾股定理求出从中心到刚体中心的距离
      powerInX=(cannonBomb.GetLocalPoint(body.GetWorldCenter()).x)*(7.5-line)/line;   //设置X Y方向的施力,最大值7.5牛
      powerInY=(cannonBomb.GetLocalPoint(body.GetWorldCenter()).y)*(7.5-line)/line;
      body.ApplyForce(new b2Vec2(powerInX* 0.5,powerInY* 0.5 ),new b2Vec2(0,0));
      //trace(body);
     } //end if
    }//end for

   }//end function BombAtArea

 

但是我这个区域由于是b2AABB,一个矩形的区域,但是实际爆炸影响的范围应该是圆形,模拟效果可能会受到影响本来应该受力的刚体没

有检测到。不知道有什么好方法可以建立一个圆形或者接近圆形的正多边形区域?



http://www.ppmy.cn/news/386939.html

相关文章

Java练手项目2:基于Java的坦克大战游戏(学习Java必备!!!)

1.引言 随着社会和时代的进步&#xff0c;来自各个方面的压力让人没精打采&#xff0c;为了分解人们的压力&#xff0c;休养那变得疲顿的头脑和劳累的身心&#xff0c;特设计了坦克大战小游戏&#xff0c;游戏操作非常容易&#xff0c;只要将手指放在键盘上敲击相关的游戏键就…

Java语言程序设计期考重点复习范围-选择题

会一直更新的&#xff01;&#xff01;&#xff01;记得点赞关注 1.下列关于Object类的描述中不正确的是&#xff08; &#xff09; A、Object是所有类的父类&#xff0c;它是Java中每个类的直接父类&#xff1b; B、当直接输出对象的引用变量时&#xff0c;输出的内…

java游戏牛仔炮筒,Java版坦克大战游戏!

疯狂的坦克大战项目实现点&#xff1a;Version&#xff1a;1.0 2016.10.22/上传 1)生成一个可玩&#xff0c;可操作的游戏窗口 a)继承Frame类,导入相应jar包快捷键 shiftctrlo; b)重写paint() 2)添加一个关闭窗口的处理 a)addWindowListener(new WindowAdaptor…

SDUT-3924 疯狂的bLue

疯狂的bLue Time Limit: 1000MS Memory Limit: 65536KB Problem Description 众所周知神秘的 ACM 实验室有一个史诗级的出题狂魔&#xff0c;名曰 bLue。最近 bLue 又露出了邪恶的笑&#xff0c;原来是 bLue 接了为校赛出题的单子。 距离校赛开始还有 N 小时&#xff0c;由于各…

Python编程之路----day2

Python开发IDE(Integrated Development Environment): PyCharm、Eclipse 1.Python运算符 运算结果是值1.算术运算a 10 * 10print(a)1002.赋值运算a 11a a 1 或 a 1print(a)12运算结果是布尔值1.比较运算a 1 > 5print(a)False2.逻辑运算a 1 > 6 or 1 1prin…

【java项目】全程无水分,Java老师带你实践,教你一小时做出java坦克大战游戏

游戏介绍&#xff1a; 保留了射击类游戏的操作性&#xff0c;也改进了射击类游戏太过于复杂难玩的高门槛特点&#xff0c;集休闲与竞技于一身。经典再度袭来&#xff0c;流畅的画面&#xff0c;疯狂的战斗&#xff0c;让玩家再次进入疯狂坦克的世界。玩家的目标是控制坦克躲避危…

【Unity】 坦克寻路

这是一篇残缺不全的记录…… Unity寻路所有的资料大概都是NavMesh吧。本来这一块跟我没啥关系&#xff0c;后来队友告诉我&#xff1a;NavMesh没法模拟坦克的转向。 我也不知道是怎样勇气打算试一下机器学习&#xff1f;反正最后凉了想看解决方法的散了吧…… 配环境啥的都不…

美到极致是疯狂

这是今天和校招新同事交流时的总结&#xff0c;希望校招新同事能够回顾&#xff0c;也能够写出自己的总结。 一、什么是代码高手&#xff1f;你怎么证明自己是代码高手&#xff1f; 知道许多代码技巧、JS炫彩技巧的人大有人在。你知道多少个.net函数&#xff0c;这一点都没有意…