`
shuai1234
  • 浏览: 972502 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

游戏开发-愤怒的小鸟-开源讲座(一)-跳入弹出的小鸟

 
阅读更多

愤怒的小鸟是一款人气火爆的益智游戏,现在我试着用lufylegend库件和Box2dWeb物理引擎来看看在html5中如何制作此类经典的物理游戏。

准备工作一

首先,你需要下载lufylegend库件1.4.1版

http://blog.csdn.net/lufy_legend/article/details/7751425

 

box2dweb你可以到这里下载

http://code.google.com/p/box2dweb/downloads/list

关于lufylegend库件的使用方法,大家可以看一下我以前的一些文章和教程,或者看下面的api说明。

http://lufy.netne.net/lufylegend-js.php?v=api

准备工作二

由于笔者的失误,没有将Box2dWeb的功能封转完,要制作物理游戏的话,不得不对lufylegend-1.4.1做一些扩展,大家可以下载这个扩展文件,等下次库件的1.5版发布的时候会将这些扩展加进去的。

http://fsanguo.comoj.com/download.php?i=lufylegend-1.4.1.extension.js

 

做好了了上面的准备工作,现在就来跟着笔者来一步步的试一下吧。

一,旋转飞起的小鸟

首先来建一个小鸟

 

[javascript] view plaincopyprint?
  1. function Bird(){  
  2.     base(this,LSprite,[]);  
  3.     var self = this;  
  4.     var bitmap = new LBitmap(new LBitmapData(imglist["bird1"]));  
  5.     self.addChild(bitmap);  
  6. }  
function Bird(){
	base(this,LSprite,[]);
	var self = this;
	var bitmap = new LBitmap(new LBitmapData(imglist["bird1"]));
	self.addChild(bitmap);
}
有了这个类,我们把它显示到画面上就很简单了

 

 

[javascript] view plaincopyprint?
  1. backLayer = new LSprite();    
  2. addChild(backLayer);  
  3. bird = new Bird();  
  4. bird.rotate = 0;  
  5. bird.x = 200;  
  6. bird.y = 430;  
  7. bird.yspeed = -5;  
  8. backLayer.addChild(bird);  
backLayer = new LSprite();	
addChild(backLayer);
bird = new Bird();
bird.rotate = 0;
bird.x = 200;
bird.y = 430;
bird.yspeed = -5;
backLayer.addChild(bird);
玩过愤怒的小鸟的朋友们都知道,游戏开始时,小鸟跳上弹弓的时候有一个旋转动作,我现在通过lufylegend库件的LTweenLite缓动类来实现这一功能。

 

[javascript] view plaincopyprint?
  1. LTweenLite.to(bird,1,  
  2.     {   
  3.         x:100,  
  4.         yspeed:5,  
  5.         delay:1,  
  6.         rotate:-360,  
  7.         onUpdate:function(){  
  8.             bird.y += bird.yspeed;  
  9.         },  
  10.         onComplete:function(){  
  11.             start();  
  12.         },  
  13.         ease:Sine.easeIn  
  14.     }  
  15. );  
LTweenLite.to(bird,1,
	{ 
		x:100,
		yspeed:5,
		delay:1,
		rotate:-360,
		onUpdate:function(){
			bird.y += bird.yspeed;
		},
		onComplete:function(){
			start();
		},
		ease:Sine.easeIn
	}
);
通过上面的代码可以看到,LTweenLite类不但可以改变一些LSprite对象的常用属性,其实可以改变任意自定义的属性,上面就是通过LTweenLite将yspeed由-5变到了,然后通过onUpdate来改变小鸟的y坐标。

 

下面是测试连接

http://lufy.netne.net/lufylegend-js/lufylegend-1.4/box2d/sample02/index.html

二,弹出的小鸟

接下来在小鸟弹起后的位置加上一个弹弓

 

[javascript] view plaincopyprint?
  1. bitmap = new LBitmap(new LBitmapData(imglist["slingshot1"]));  
  2. bitmap.x = 215;  
  3. bitmap.y = 290;  
  4. backLayer.addChild(bitmap);  
  5.   
  6. bird = new LSprite();  
  7. bird.name = "bird01";  
  8. backLayer.addChild(bird);  
  9. bitmap = new LBitmap(new LBitmapData(imglist["bird1"]));  
  10. bird.addChild(bitmap);  
  11.   
  12. bitmap = new LBitmap(new LBitmapData(imglist["slingshot2"]));  
  13. bitmap.x = 190;  
  14. bitmap.y = 290;  
  15. backLayer.addChild(bitmap);  
	bitmap = new LBitmap(new LBitmapData(imglist["slingshot1"]));
	bitmap.x = 215;
	bitmap.y = 290;
	backLayer.addChild(bitmap);
	
	bird = new LSprite();
	bird.name = "bird01";
	backLayer.addChild(bird);
	bitmap = new LBitmap(new LBitmapData(imglist["bird1"]));
	bird.addChild(bitmap);
	
	bitmap = new LBitmap(new LBitmapData(imglist["slingshot2"]));
	bitmap.x = 190;
	bitmap.y = 290;
	backLayer.addChild(bitmap);

 

效果如图

上面代码将弹弓的前后两个分叉加到了画面上。
接着通过鼠标来拖拽小鸟,首先加入鼠标按下事件

 

[javascript] view plaincopyprint?
  1. backLayer.addEventListener(LMouseEvent.MOUSE_DOWN,downStart);  
  2. startX = bird.x + bird.getWidth()*0.5;  
  3. startY = bird.y + bird.getHeight()*0.5;  
backLayer.addEventListener(LMouseEvent.MOUSE_DOWN,downStart);
startX = bird.x + bird.getWidth()*0.5;
startY = bird.y + bird.getHeight()*0.5;
上面代码加上了鼠标事件,并记录下了小鸟中心的位置作为弹弓的中心位置。
然后当鼠标按下的时候,判断下鼠标是否点击到了小鸟,然后移除鼠标按下事件,并加入鼠标移动事件和鼠标弹起事件。

 

 

[javascript] view plaincopyprint?
  1. function downStart(event){  
  2.     if(event.offsetX > bird.x && event.offsetX < bird.x + bird.getWidth() &&   
  3.         event.offsetY > bird.y && event.offsetY < bird.y + bird.getHeight()){  
  4.         backLayer.removeEventListener(LMouseEvent.MOUSE_DOWN,downStart);  
  5.         backLayer.addEventListener(LMouseEvent.MOUSE_MOVE,downMove);  
  6.         backLayer.addEventListener(LMouseEvent.MOUSE_UP,downOver);  
  7.     }  
  8. }  
function downStart(event){
	if(event.offsetX > bird.x && event.offsetX < bird.x + bird.getWidth() && 
		event.offsetY > bird.y && event.offsetY < bird.y + bird.getHeight()){
		backLayer.removeEventListener(LMouseEvent.MOUSE_DOWN,downStart);
		backLayer.addEventListener(LMouseEvent.MOUSE_MOVE,downMove);
		backLayer.addEventListener(LMouseEvent.MOUSE_UP,downOver);
	}
}
先来实现下鼠标移动时候的,让小鸟跟随鼠标

 

 

[javascript] view plaincopyprint?
  1. unction downMove(event){  
  2.     var r = Math.sqrt(Math.pow((startX - event.selfX),2)+Math.pow((startY - event.selfY),2));  
  3.     if(r > 100)r = 100;  
  4.     var angle = Math.atan2(event.selfY - startY,event.selfX - startX);  
  5.     bird.x = Math.cos(angle) * r + startX - bird.getWidth()*0.5;  
  6.     bird.y = Math.sin(angle) * r + startY - bird.getHeight()*0.5;  
  7. }  
unction downMove(event){
	var r = Math.sqrt(Math.pow((startX - event.selfX),2)+Math.pow((startY - event.selfY),2));
	if(r > 100)r = 100;
	var angle = Math.atan2(event.selfY - startY,event.selfX - startX);
	bird.x = Math.cos(angle) * r + startX - bird.getWidth()*0.5;
	bird.y = Math.sin(angle) * r + startY - bird.getHeight()*0.5;
}
解释下上面的代码,首先,计算鼠标位置和弹弓的中心位置之间的距离,当距离大于100的时候,使其等于100。接着计算鼠标拖拽的角度,然后通过这个角度来计算并设置小鸟的坐标。

 

接着,看一下鼠标弹起后的功能,上面的代码里并没有用到box2dweb,我通过将小鸟变为box2d刚体,然后给小鸟加上一个力,来让小鸟弹飞出去

[javascript] view plaincopyprint?
  1. function downOver(event){  
  2.     backLayer.removeEventListener(LMouseEvent.MOUSE_UP,downOver);  
  3.     backLayer.removeEventListener(LMouseEvent.MOUSE_MOVE,downMove);  
  4.       
  5.     var startX2 = bird.x + bird.getWidth()*0.5;  
  6.     var startY2 = bird.y + bird.getHeight()*0.5;  
  7.     var r = Math.sqrt(Math.pow((startX - startX2),2)+Math.pow((startY - startY2),2));  
  8.     var angle = Math.atan2(startY2 - startY,startX2 - startX);  
  9.       
  10.     bird.addBodyCircle(bird.getWidth()*0.5,bird.getHeight()*0.5,bird.getWidth()*0.5,1,.5,.4,.5);  
  11.     var force = 7;  
  12.     var vec = new LGlobal.box2d.b2Vec2(-force*r*Math.cos(angle),-force*r*Math.sin(angle));  
  13.     bird.box2dBody.ApplyForce(vec, bird.box2dBody.GetWorldCenter());  
  14. }  
function downOver(event){
	backLayer.removeEventListener(LMouseEvent.MOUSE_UP,downOver);
	backLayer.removeEventListener(LMouseEvent.MOUSE_MOVE,downMove);
	
	var startX2 = bird.x + bird.getWidth()*0.5;
	var startY2 = bird.y + bird.getHeight()*0.5;
	var r = Math.sqrt(Math.pow((startX - startX2),2)+Math.pow((startY - startY2),2));
	var angle = Math.atan2(startY2 - startY,startX2 - startX);
	
	bird.addBodyCircle(bird.getWidth()*0.5,bird.getHeight()*0.5,bird.getWidth()*0.5,1,.5,.4,.5);
	var force = 7;
	var vec = new LGlobal.box2d.b2Vec2(-force*r*Math.cos(angle),-force*r*Math.sin(angle));
	bird.box2dBody.ApplyForce(vec, bird.box2dBody.GetWorldCenter());
}
上面代码首先计算了一下小鸟的被拖拽的距离,以及被拖拽的角度。

 

addBodyCircle给小鸟加入body,让其变为一个刚体。

ApplyForce给刚体加上一个力。

好了,点开下面链接进行测试,通过拖拽小鸟,将小鸟弹飞出去吧。

http://lufy.netne.net/lufylegend-js/lufylegend-1.4/box2d/sample02/index02.html

 

下面给出本次教程的源码,当然,lufylegend库件和box2dweb需要自己下载配置一下

http://fsanguo.comoj.com/download.php?i=AngryBirds1.rar

 

本次就写到这里,在下一讲中会加入碰撞功能,并且让镜头时刻跟随小鸟,敬请期待。

分享到:
评论

相关推荐

    MATLAB 2010a 游戏开发----愤怒的小鸟

    本项目“MATLAB 2010a 游戏开发----愤怒的小鸟”就为我们展示了一个独特的应用场景,即使用MATLAB来构建一个游戏,模拟经典手机游戏“愤怒的小鸟”的玩法。 MATLAB 2010a是MATLAB的一个较早版本,虽然其功能相对于...

    5C++设计模式--基于Qt4开源跨平台开发框架 完整清晰版中文PDF.zip

    好东西一定得分享,自己现阶段需要好好学习一下QT。C++设计模式--基于Qt4开源跨平台开发框架 完整清晰版中文PDF。好东西而且分数不贵!解压密码qt。

    Python-愤怒的小鸟.zip

    《Python游戏开发:愤怒的小鸟》 Python是一种广泛应用于各个领域的编程语言,其简洁明了的语法使得初学者也能快速上手。在游戏开发领域,Python搭配pygame库,可以轻松创建2D游戏,如我们今天要探讨的"愤怒的小鸟...

    Java版 愤怒的小鸟开源游戏

    《Java版 愤怒的小鸟开源游戏》是一款基于Java平台开发的开源游戏,它以经典游戏《愤怒的小鸟》为原型,为开发者提供了一种学习和实践Java游戏编程的机会。这款游戏的源代码开放,允许程序员深入理解游戏的内部机制...

    《C++设计模式--基于Qt4开源跨平台开发框架》part2

    《C++设计模式--基于Qt4开源跨平台开发框架》涉及到qt的基础知识和容器语法的使用,qt中的设计模式,是很好的资料。现与大家一起分享。免费下载。 由于上传大小有限制,所以分为两部分。 第一部分下载地址: ...

    大恒-双相机开发-C#-多线程-项目开源

    《大恒双相机开发-C#-多线程项目开源解析》 在当今信息化时代,高效、稳定的图像处理系统成为许多领域不可或缺的技术支持。本项目"大恒-双相机开发-C#-多线程"正是这样的一个实例,它利用C#语言进行编程,实现了对...

    android基于开源游戏引擎jbox2d开发的高仿愤怒的小鸟游戏源码.rar

    本篇将详细介绍如何使用JBox2D来开发一个高仿愤怒的小鸟的游戏。 一、JBox2D简介 JBox2D是Java版本的Box2D物理引擎,它基于C++的Box2D,提供了一个强大的2D物理模拟环境,能够处理碰撞检测、刚体动力学以及关节...

    基于java的开发源码-md blockchain 开源java区块链平台.zip

    打地鼠游戏设计c 基于java的开发源码-md blockchain 开源java区块链平台.zip 基于java的开发源码-md blockchain 开源java区块链平台.zip 基于java的开发源码-md blockchain 开源java区块链平台.zip 基于java的开发...

    Python pygame 愤怒小鸟.rar

    本项目“愤怒的小鸟”是基于Pygame模块构建的一个小型游戏,旨在展示如何利用Pygame进行游戏开发,并提供一个有趣的编程实践案例。 1. Pygame基础 Pygame是建立在Python的基础之上,它包含了一系列用于处理图形、...

    C#源码系列7---一个开源ERP源码(C#)

    C#源码系列7---一个开源ERP源码(C#)

    cocos-2d愤怒的小鸟2

    【标题】"cocos-2d愤怒的小鸟2" 是一款基于Cocos2D游戏引擎开发的移动游戏,是著名游戏“愤怒的小鸟”的续作。Cocos2D是一款广泛应用于2D游戏开发的开源框架,它提供了丰富的功能,如场景管理、动画支持、物理引擎...

    基于Cocos2dx + box2d 实现的愤怒的小鸟Demo

    Cocos2dx是一个开源的、免费的游戏开发框架,支持多种平台,包括iOS、Android、Windows等。它的核心特性包括: 1. **跨平台**:Cocos2dx使用同一套代码库即可在多个平台上运行,极大地提高了开发效率。 2. **高效...

    愤怒的小鸟java版小游戏源码

    《愤怒的小鸟》是一款备受欢迎的休闲游戏,其Java版小游戏源码为我们提供了一次深入理解游戏开发的机会。本文将围绕这个主题,详细介绍Java编程语言在游戏开发中的应用,以及如何利用这些源码进行学习。 首先,让...

    Python小游戏-像素小鸟(Fallppybird)

    在Python编程领域,游戏开发是一项有趣的实践,可以让学习者更好地理解和掌握编程概念。"像素小鸟(Fallppybird)"是一款基于Python的小游戏,模仿了经典的Flappy Bird,它以像素艺术风格呈现,简单却富有挑战性。这个...

    H5游戏源码分享-像素小鸟游戏(类似深海潜艇)

    开发者可能使用了如Phaser这样的开源游戏框架,该框架内置了物理引擎,能简化这类游戏的开发。 在与深海潜艇的比较中,我们可以看到两者都是基于垂直方向的移动和障碍物躲避。在深海潜艇游戏中,玩家控制潜艇在海底...

    愤怒的小鸟(VS2005)

    《愤怒的小鸟》是一款备受欢迎的休闲游戏,其在移动平台上的成功激发了许多开发者尝试将其移植到个人计算机(PC)上。在这个项目中,我们看到一个使用C++、DirectX(DX)和Box2D物理引擎实现的版本,特别针对Visual ...

    IOS应用源码Demo-一款基于cocos2d类似《愤怒的小鸟》的ios游戏源码-毕设学习.zip

    标题中的“IOS应用源码Demo-一款基于cocos2d类似《愤怒的小鸟》的ios游戏源码-毕设学习.zip”揭示了我们讨论的核心内容:一个iOS游戏应用的源代码,它模仿了热门游戏《愤怒的小鸟》的玩法,并且是作为毕业设计的学习...

    html5 canvas愤怒的小鸟游戏源码下载

    这个压缩包文件包含了实现"愤怒的小鸟"游戏的源代码,对于学习HTML5 Canvas编程和游戏开发来说,是一个很好的实例。 首先,Canvas元素是HTML5中新增的,通过JavaScript来操作其上下文(`canvas.getContext('2d')`)...

    Java版 愤怒的小鸟开源游戏1.zip

    Java版 愤怒的小鸟开源游戏1

    FLAPPY_BIRD.rar

    本篇将围绕一个个人开发者使用Cocos2dx引擎制作的“愤怒的小鸟”项目展开,深入探讨其中涉及的技术点和知识点,旨在为对游戏开发感兴趣的读者提供一份详尽的学习参考资料。 首先,Cocos2dx是一个开源的游戏开发框架...

Global site tag (gtag.js) - Google Analytics