所有分类
  • 所有分类
  • 后端开发
小鸟碰撞大作战!冲力玩物理游戏必备技巧

小鸟碰撞大作战!冲力玩物理游戏必备技巧

本次来研究一下小鸟与其他物体之间发生碰撞时的冲力,以及由碰撞而使物体发生变形,进而消失,下面是前两讲的链接,看本篇教程之前请朋友们最好先了解一下。本系列讲座到此为止了,愤怒的小鸟的基本功能已经都实现了,剩下的就是将元素多样化了,大家可以尽情

理解碰撞冲力

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;
}

完工了基础功能以后,就得让游戏变得五彩斑斓起来!比如设定更多属性和行为,增加新的对象种类这种方式,让游戏更有趣,玩着也更尽兴~发挥想象吧亲们,打造出炫酷又好玩的物理游戏场景~

这就是我们教你如何搞定小鸟碰东西时的冲击力和变形~学会这个小技巧,你的游戏场景就会变得更有意思!首先要理解碰撞原理,接着要控制物体状态、消除效果、观察物体变化这些基本操作,这样就能做出更吸引人的游戏了。学完这个课程,相信你可以让你的物理游戏更上一层楼,同时也能给自己的创意增添新的色彩啦!

小鸟碰撞大作战!冲力玩物理游戏必备技巧

原文链接:https://www.icz.com/technicalinformation/web/2024/04/14985.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?