理解碰撞冲力
LGlobal.box2d.setEvent(LEvent.POST_SOLVE,postSolve);
玩物理游戏时,咱们得注意研究下小鸟撞到其他东西会发生啥。首先,要给每个物体设好它的重量、摩擦力还有弹性这些特性,这样就能像真生活那样感受到碰撞了。用box2d这个软件,里面有个函数能帮你看出冲力有多大,然后拿它搞定后面那些事就行。搞清楚冲力大小后,就可以随心所欲地控制物体的各种行动!
function postSolve(contact, impulse){ }
控制猪头状态
为了控制小鸟和猪头兵之间的对战,咱们可以做个Pig类去掌握猪头兵的状况。在初始化的时候设定它的健康状态图案,然后让hit函数在撞上别人后把它变成受了伤的图样儿。这样,通过调整猪头兵的情况和血量,就能展示出各种不同的图画效果,比如轻伤、重伤之类,让游戏变得更有意思了!
function Pig(){ base(this,LSprite,[]); var self = this; self.hp = 200; self.name = "pig"; self.list = ["pig01","pig02"]; self.bitmap = new LBitmap(new LBitmapData(imglist[self.list[0]])); self.addChild(self.bitmap); self.addBodyCircle(24,self.bitmap.getHeight()*0.5,self.bitmap.getWidth()*0.5,1,5,.4,.13); } Pig.prototype.hit = function(value){ var self = this; if(value < 10)return; if(self.hp == 200)self.bitmap.bitmapData = new LBitmapData(imglist[self.list[1]]); self.hp -= value; }
处理木条状态变化
除了猪头,游戏里面还有各种东西,例如木条。为了让你玩耍更轻松,咱们可以用Stage类去控制它们的状态。就像Pig类那样,每次碰撞都会根据冲力大小调整木条的状态。这样,就算是不同的物件也能统一管理,让游戏画面更丰富有趣!
移除物体效果
碰到碰撞多了或者生命值归零,得把这个家伙给拿掉!那就做个RemoveObject类,让run函数来设置后撤消失效果,这样就能有更强大的视觉冲击力。
function Stage(list,rotate,m,ctrl){ base(this,LSprite,[]); var self = this; self.name = "stage"; self.ctrl = ctrl; self.list = list; self.bitmap = new LBitmap(new LBitmapData(imglist[self.list[0]])); self.hp = 200; self.addChild(self.bitmap); self.addBodyPolygon(self.bitmap.getWidth(),self.bitmap.getHeight(),1,m,.4,.2); if(rotate != 0)self.setRotate(rotate*Math.PI/180); } Stage.prototype.hit = function(value){ var self = this; if(!self.ctrl)return; if(value < 1)return; if(self.hp == 200)self.bitmap.bitmapData = new LBitmapData(imglist[self.list[1]]); self.hp -= value; }
监视物体状态
搞定这个游戏循环函数,得时刻注意每个小东西的动态,要清除悄悄消失或者需要挪走的家伙。所以我们得用那种钻牛角尖似的手法,把每个人物都翻个底朝天,根据他们的“感觉”做出相应对策,这样我们的游戏界面就能井然有序!不过别忘了在小鸟走上“天堂”之后添点儿事儿,比如移动屏幕啥的,让玩游戏变得愈发有趣和刺激!
setStage(["desk"],800,430,0,10,false); setStage(["desk"],970,430,0,10,false); setStage(["st11","st12"],935,410,0,1,true); setStage(["st01","st02"],905,370,90,1,true); setStage(["st01","st02"],965,370,90,1,true); setStage(["st11","st12"],935,310,0,1,true); setStage(["st31","st32"],817,370,90,1,true); setStage(["st31","st32"],970,370,90,1,true); setStage(["st31","st32"],895,250,0,1,true); setStage(["st21","st22"],955,230,0,1,true); setStage(["st31","st32"],858,150,90,1,true); setStage(["st31","st32"],925,150,90,1,true); setStage(["st11","st12"],935,50,0,1,true); setStage(["st21","st22"],950,30,90,1,true); setStage(["st21","st22"],800,430,90,1,true); setStage(["st21","st22"],1100,430,90,1,true); var pig = new Pig(); pig.x = 950; pig.y = 173; backLayer.addChild(pig);
元素多样化
function setStage(list,x,y,rotate,m,ctrl){ var stageLayer = new Stage(list,rotate,m,ctrl); stageLayer.x = x; stageLayer.y = y; backLayer.addChild(stageLayer); return stageLayer; }
完工了基础功能以后,就得让游戏变得五彩斑斓起来!比如设定更多属性和行为,增加新的对象种类这种方式,让游戏更有趣,玩着也更尽兴~发挥想象吧亲们,打造出炫酷又好玩的物理游戏场景~
这就是我们教你如何搞定小鸟碰东西时的冲击力和变形~学会这个小技巧,你的游戏场景就会变得更有意思!首先要理解碰撞原理,接着要控制物体状态、消除效果、观察物体变化这些基本操作,这样就能做出更吸引人的游戏了。学完这个课程,相信你可以让你的物理游戏更上一层楼,同时也能给自己的创意增添新的色彩啦!
。
评论0