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

news/2024/2/28 17:47:24

初学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;这一点都没有意…

坦克大战游戏Java网络版设计

目 录 1.引言 1 2.系统分析 2 2.1需求和技术分析 2 2.2功能分析 2 3.总体设计 2 3.1总体功能 2 3.2坦克大战总体流程图 4 4.详细设计 5 4.1面板功能设计 5 4.2子弹功能设计 8 4.3坦克功能设计 9 4.4服务器设计 10 4.5客户端设计 13 5. 游戏测试 15 5.1 测试方法 15 5.2 系统测试…

Cocos2d游戏源码下载分享

对于很多新手来说&#xff0c;学习游戏开发不仅需要大量的技术文档、教程支持&#xff0c;我觉得一个完整的游戏源码那也是必须的&#xff0c;毕竟实践出真知嘛&#xff01;遥想当年&#xff0c;为了完成大学每学期的工程实践课程&#xff0c;花了好多时间在网上收刨各种学习资…

python小游戏————坦克大战

目录 一、需求分析 二、系统分析 主类&#xff1a; 坦克类&#xff08;包含我方坦克&#xff0c;敌方坦克&#xff09; 子弹类 爆炸类 三、代码功能实现 五、总代码&#xff1a; 一、需求分析 坦克大战是儿时经常玩的一个游戏&#xff0c;没想起它&#xff0c;脑子里…

《Unity入门案例-Tanks坦克大战》2-场景设置

2 场景设置 2.1 本节效果预览 2.2 项目目录设置 点击Project面板的Create按钮,在根目录下面新建wm文件夹 Wm文件夹用于存放我们自己生成的Prefab和脚本等其他资源,主要是与Tanks项目原始资源和素材做区分. Wm文件夹下面有三个子文件夹 Prefabs用于存放我们自己定义的预设体…

美服疯狂坦克辅助瞄准外挂C#版开发(一)物理模型及弹道曲线方程

疯狂坦克弹道曲线方程式&#xff1a; 由上面的图表&#xff0c;根据初中物理知识&#xff0c;我们可以推导以下弹道曲线方程式&#xff1a; 以上物理模型和公式就已经完成了&#xff0c;当然这只是一个近似的公式&#xff0c;由于疯狂坦克游戏算法中存在同角和力点不均匀分布&a…

美服疯狂坦克辅助瞄准外挂C#版开发(三)在全屏游戏屏幕上绘制弹道曲线

要在游戏全屏模式下屏幕绘制弹道曲线&#xff0c;需要用到以下三个API&#xff1a; //获取DC [DllImport("User32.dll")] public extern static System.IntPtr GetDC(System.IntPtr hWnd); //释放DC [System.Runtime.Inter…

美服疯狂坦克辅助瞄准外挂C#版开发(四)程序使用说明和完成源代码及其下载

到现在为止&#xff0c;我们已经将疯狂坦克外挂所需相关的功能点及解决方案完成。 先说说常规的使用方法&#xff1a; 1、编译发布程序后&#xff0c;先运行程序&#xff08;默认不可见&#xff09;&#xff0c;然后进入美服疯狂坦克。 2、在游戏中按&#xff08;Pause&…

美服疯狂坦克辅助瞄准外挂C#版开发(二)全局鼠标键盘HOOK

大家都知道&#xff0c;Windows操作系统内部通讯是基于消息机制的。为了实现我们的功能&#xff0c;必须要能够截和处理获游戏中鼠标键盘事件的消息&#xff0c;常规做法是获取游戏窗体的句柄&#xff0c;然后加入HOOK&#xff0c;这样的好处是不会影响到其它正在运行的程序对鼠…

疯狂坦克高抛,半抛,小抛算法

所有车的高抛半抛及小抛算法17:等待和数字中间18:百位数字前端19:百位数字20:十位和个位数字中间21:数字框最后22:喇叭框开头23:喇叭把手前一点(23.5这个位置即为老土半抛和飞火老土抛的点)24:喇叭口25:喇叭后第二波纹26:喇叭后第四波纹27:第一个手机28:第一手机后第二波纹29:第…
最新文章