创新实践 iphone软件开发报告Word格式.docx
- 文档编号:20382425
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:14
- 大小:1.25MB
创新实践 iphone软件开发报告Word格式.docx
《创新实践 iphone软件开发报告Word格式.docx》由会员分享,可在线阅读,更多相关《创新实践 iphone软件开发报告Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
2.开发工具
除了Xcode/Objective-C组合以外,你还需要一些其他工具和应用以创建游戏,下面是一些这类工具的简单概述。
(工具)--下面这些工具在设计和开发iOS5游戏时是必需的。
Xcode
Xcode是用于编写iOS应用和游戏的开发环境。
最新的版本是带有iOSSDK5.0的Xcode4.2版本。
Xcode是一个整体的开发环境,在单一界面中提供编码、界面设计、编译、调试、测试和剖析等功能。
iOSSimulator
iOSSimulator主要用于测试应用和游戏,使设计好的游戏就像在3个不同的iOS设备上运行一样:
标准iPhone320×
480,具有Retina屏幕的iPhone640×
960和iPad1024×
768。
你可以在没有实际硬件的情况下测试这3种设备。
iOSInstruments
iOSInstruments是应用程序用来动态跟踪和分析MacOSX和iOS代码的实用工具。
这是一个灵活而强大的工具,它让你可以跟踪一个或多个进程,并检查收集的数据。
这样,Instruments可以帮你更好的理解应用程序和操作系统的行为。
Dashcode
Dashcode是苹果XCODE开发者套件中的一个工具,完全利用HTML+CSS+JAVASCRIPT技术,构建适用于MACOSX的DASHBOARDWIDGET,桌面级网页程序,以及IPHONE网页程序。
(其他工具)
Preview,Hiero,Audacity等,当然还有笔和纸~
系统构架图
搭建开发环境
选择iPhone模拟
2系统分析与设计
“为什么你在做梦的时候,玩具会从一个地方移动到另一个地方?
”SweetDreams是一款玩起来非常轻松的休闲游戏,游戏使用cocos2d开发库进行开发,充分利用iPhone创新的用户界面控制方式,通过倾斜手机移动角色、控制速度和方向,单击屏幕进行跳跃,摇动手机摆动绳索,梦幻般的音乐听起来让人心情愉快,解决难题后即可获得奖金。
(运行效果)
SweetDreams游戏界面如图所示
游戏使用经典的MVC(Model-View-Control)模式构建系统框架,并使用Box2D作为物理引擎,引擎则作为模式中的“Model”部分将游戏中的精灵(Sprite)进行对象建模,引擎包括间距链接(DistanceJoint)和旋转链接(RevoluteJoint),奖物体连续连接在一起接受物理作用,每个精灵都对应Box2D的一个刚体(b2Body)对象,这样在精灵类对应的视图(View)和控制器(Control)中就可以非常方便地使用Box2D提供的功能。
如图所示“Model-View-Control”模式示意图。
游戏物理建模类图如图
BaseModelObject
BaseModelObject类包含物理模型基类的宽度、高度、密度、阻尼、摩擦、还原等属性,游戏中的云朵、花、精灵、房屋等都属于该模型对象,通过这样的物理建模,游戏就可以非常方便地使用Box2D提供的功能来进行精灵的位置更新和“碰撞检测”。
3系统详细设计
BaseModelObject的类定义代码如下。
/*
*BaseModelObject.h
*SweetDreams
*
*/
//BaseModelObject.h
#import“IModelObject.h”
@interfaceBaseModelObject:
NSObject<
IModelObject>
{
b2Body*physicalbody;
floatZ;
floatwidth;
floatheight;
floatlinearDamping;
floatangularDamping;
floatdensity;
floatfriction;
floatrestitution;
boolhasMass;
boolisInWater;
boolfixedRotation;
}
-(id)initInWorld:
(b2World*)mWorldwithRect:
(CGRect)mLocation;
@end
加速度传感器(Accelerometer)
iOS提供了一个UIAccelerometer类来获取加速度数据,这个类属于singleton类型,全局唯一,该类从传感器硬件读取数据,总共可以检测6个方向上的加速度,X、Y、Z的取值都在-0.5~0.5之间,只要设置UIAccelerometer对象的delegete为你的对象,(例如UIApplication),你的对象就可以在回调借口中接收到加速度数据更新通知。
使用一下代码来对加速度传感器进行测试,以便对UIAccelerometer类有一个感性的认识。
UIAccelerometer*accelerometer;
self.accelerometer=[UIAccelerometersharedAccelerometer];
self.accelerometer.updateInterval=.1;
self.accelerometer.delegate=self;
-(void)accelerometer:
(UIAccelerometer*)accelerometerdidAccelerate
:
(UIAcceleration*)acceleration
labelX.text=[NSStringstringWithFormat:
@”X:
%f”,acceleration.x];
labelY.text=[NSStringstringWithFormat:
@”Y:
%f”,acceleration.y];
labelZ.text=[NSStringstringWithFormat:
@”Z:
%f”,acceleration.z];
self.progressX.progress=ABS(acceleration.x);
self.progressY.progress=ABS(acceleration.y);
self.progressZ.progress=ABS(acceleration.z);
游戏在BaseGameLayer类中通过一个NSMutableArray类型的变量imputHandlers来管理Accelerometer控制,并在其didAccelerate()函数中遍历这个数组,将加速度数据通知数组中的各个CharacterController对象,这样各个精灵都能产生加速度作用,代码如下
-(void)accelerometer:
(UIAccelerometer*)accelerometerdidAccelerate:
(UIAcceleration*)acceleration
{for(id<
IInputHandler>
inputHandlerininputHandlers)
{
[inputHandleraccelerometer:
accelerometerdidAccelerate:
acceleration];
}
在游戏的场景类中将CharacterController对象加入该数组,代码如下。
//Cow01Scene.mm
-(void)spawnChar
[selfunschedule:
@selector(spawnChar)];
CharacterController*character=[[[CowControlleralloc]initCharacter:
self:
CGRectMake(120,110,15,50)]autorelease];
[selfaddChild:
characterz:
2];
[selfaddInputHandler:
character];
[spawnExitcloseExit];
在CharacterController类的didAccelerate()方法中具体处理加速度数据,代码如下。
//CharacterController.mm
(UIAccelerometer*)accelerometerdidAccelerate:
if(characterStatus==CharacterView_PrepareJump)
return;
//LOG(@"
accelerometer>
>
characterStatus:
%d"
characterStatus);
if(characterStatus==CharacterView_Swing&
&
!
[[modelgrabbedObject]isKindOfClass:
[BallonModelclass]])
floatx=acceleration.y;
floaty=acceleration.x;
floattVectorLength=sqrt(x*x+y*y);
xTilt=-10.0f*x/tVectorLength;
yTilt=10.0f*y/tVectorLength;
//LOG(@"
CharacterController:
accelerometerswingxTilt:
%f,yTilt%f"
xTilt,yTilt);
if(acceleration.y>
MOVEMENT_ACCELERATION_THRESHOLD)
[selfcontrolLeft];
elseif(acceleration.y<
-MOVEMENT_ACCELERATION_THRESHOLD)
[selfcontrolRight];
else
[selfcontrolCenter];
这里通过勾股定理计算平方根来得到倾斜度,通过将acceleration.y和阈值进行比较获得用户移动的方向,即计算精灵应该向右移动,或者应该保持位置不变,这里移动阈值的定义为加速度最大值的四分之一,代码如下。
#defineMOVEMENT_ACCELERATION_THRESHOLD0.125f
在GravityController类中通过调用Box2D的ApplyForce()函数来将加速度效应作用到具体的精灵(其实是Box2D的刚体)上,代码如下。
//GravityController.mm
if(targetModel==nil)
floatx=acceleration.y;
floaty=acceleration.x;
floattVectorLength=sqrt(x*x+y*y);
floatxTilt=-500.0f*x/tVectorLength;
[targetModelphysicalBody]->
WakeUp();
[targetModelphysicalBody]->
ApplyForce(b2Vec2(xTilt,0),
GetLocalCenter());
在BaseModelObject基类中再通过GetPosition()、GetAngle()、
GetMass()等函数获取Box2D加速度效果效应计算后的结果,代码如下。
//BaseModelObject.mm
-(float)x{
return[selfphysicalBody]->
GetPosition().x;
在CharacterController类中则根据这些计算后的位置数据更新精灵的位置,代码如下。
//CharacterController.mm
#pragmamarkScene
-(void)tick:
(ccTime)delta
tick>
model==nil:
%dcharacterStatus:
model==nil,characterStatus);
if(model==nil)
[modelupdate:
delta];
switch(characterStatus)
caseCharacterView_Idle:
[selftickIdle];
break;
caseCharacterView_Walk:
[selftickWalk];
caseCharacterView_PrepareJump:
[selftickPrepareJump];
caseCharacterView_Jump:
[selftickJump];
caseCharacterView_PrepareLand:
[selftickPrepareLand];
caseCharacterView_Land:
[selftickLand];
caseCharacterView_Push:
[selftickPush];
caseCharacterView_Pushing:
caseCharacterView_EndPush:
[selftickEndPush];
caseCharacterView_Swing:
caseCharacterView_SwingRelease:
[selftickSwing];
caseCharacterView_Falling:
[selftickFalling];
default:
[selfstop];
LOG(@"
defaultcalledstop"
);
[selfupdatePosition:
[modelx]:
[modely]];
本节的完整代码以上传至XX网盘下载:
4结论
通过本案例,在学习iOS编程的基础上更进一步,我们看到了如何采用Box2D物理引擎进行对象建模,如何结合Box2D物理引擎和cocos2d库进行真实的商业iOS游戏开发,使用Box2D和cocos2d库,将极大地提高游戏开发的效率,cocos2d库和Box2D的成熟性可以帮助你只编写少量的代码即可实现游戏的各种功能,并且具有强大的灵活性和可扩展型。
5考文献
[1]虞斌.iOS软件开发揭秘iPhone&
iPad企业应用和游戏开发(第2版),2012.
[2]JamesSugrue.ios5游戏开发.人民邮电出版社,2012.
[3]ShawnWelch.iOS5CoreFrameworks.人民邮电出版社,2012.
[4]JohnRay.iOS5应用开发。
入门经典(SAMS).人民邮电出版社(第3版),2012.
[5]StevenHolzner.Objective-C2.0编程快速上手.机械工业出版社,2010
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 创新实践 iphone软件开发报告 创新 实践 iphone 软件 开发 报告