创新实践 iphone软件开发报告.docx

上传人:b****5 文档编号:7275049 上传时间:2023-01-22 格式:DOCX 页数:14 大小:1.25MB
下载 相关 举报
创新实践 iphone软件开发报告.docx_第1页
第1页 / 共14页
创新实践 iphone软件开发报告.docx_第2页
第2页 / 共14页
创新实践 iphone软件开发报告.docx_第3页
第3页 / 共14页
创新实践 iphone软件开发报告.docx_第4页
第4页 / 共14页
创新实践 iphone软件开发报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

创新实践 iphone软件开发报告.docx

《创新实践 iphone软件开发报告.docx》由会员分享,可在线阅读,更多相关《创新实践 iphone软件开发报告.docx(14页珍藏版)》请在冰豆网上搜索。

创新实践 iphone软件开发报告.docx

创新实践iphone软件开发报告

摘要

从没有比现在更好的时机,能通过为iOS编写游戏,将我们的创意带人生活中。

苹果AppStore给了我们巨大的机会,让我们的游戏可以出现在数百万的客户面前,游戏的分发也从未像如今这样简单和广泛。

你不仅能够拥有数百万的潜在客户还能拥有尖端的开发工具和硬件。

iPhone和PodTouch的能力已经超过了几年前的桌面电脑。

它们能使你创建一些极其出色的游戏,而很少受到早期手持设备的硬件和软件限制。

本设计在对ios游戏开发有初步了解的情况下,设计一个有代表性的iOS商业游戏实例,通过对商业游戏实例的学习,了解真实游戏项目的系统构架、引擎设计,了解声音、视频、图片处理等相关的编程技术要点、以便在实际的游戏项目开发中借鉴和综合应用这些知识,本设计具有极高的商业价值,通过对完整的游戏源代码学习可以在这个游戏的基础上创建不同类型的ios新游戏。

关键词:

ios编程、iPone开发、游戏开发

 

目录

1开发工具与环境-2-

2系统分析与设计-5-

3系统详细设计-9-

5结论-15-

6参考文献-16-

 

1开发工具与环境

为iOS开发和设计游戏,需要许多工具和框架,例如,你将使用Xcode,这是苹果公司发布的一款免费集成开发环境(IDE),此外你还要学会在iOS中使用原生语言Objective-C;

1.Objective-C介绍

Objective-C语言主要用于MacOSX操作系统和iOS平台的软件开发。

Objective-C语言是C语言的超集,这使得C语言开发的代码可以不用修改就能够运行在Objective-C环境中,该语言设计为可以支持真正的面向对象编程(OOP)。

Objective-C通过提供类定义、方法以及属性的语法、还有其他可以提高类的动态扩展能力的结构等,扩展了标准ANSIC语言,添加了动态类型、反射等机制,并且具有某些动态语言,如Python、Ruby所具有的特征,其类的语法和设计主要基于Smalltalk编程语言,编译以后的Objective-C代码是本地机器码,这相对运行于虚拟机的JAVA、Python和Ruby具有更高的性能,又比C++有更强的动态性。

Objective-C的最新版本是2.0,跟随MacOSX一起发布。

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

{

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(idinputHandlerininputHandlers)

{

[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

-(void)accelerometer:

(UIAccelerometer*)accelerometerdidAccelerate:

(UIAcceleration*)acceleration

{

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

return;

}

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

-(void)accelerometer:

(UIAccelerometer*)accelerometerdidAccelerate:

(UIAcceleration*)acceleration

{

if(targetModel==nil)

return;

floatx=acceleration.y;

floaty=acceleration.x;

floattVectorLength=sqrt(x*x+y*y);

floatxTilt=-500.0f*x/tVectorLength;

[targetModelphysicalBody]->WakeUp();

[targetModelphysicalBody]->ApplyForce(b2Vec2(xTilt,0),

[targetModelphysicalBody]->GetLocalCenter());

}

在BaseModelObject基类中再通过GetPosition()、GetAngle()、

GetMass()等函数获取Box2D加速度效果效应计算后的结果,代码如下。

//BaseModelObject.mm

-(float)x{

return[selfphysicalBody]->GetPosition().x;

}

在CharacterController类中则根据这些计算后的位置数据更新精灵的位置,代码如下。

//CharacterController.mm

#pragmamarkScene

-(void)tick:

(ccTime)delta

{

//LOG(@"tick>>model==nil:

%dcharacterStatus:

%d",model==nil,characterStatus);

if(model==nil)

return;

[modelupdate:

delta];

switch(characterStatus)

{

caseCharacterView_Idle:

[selftickIdle];

break;

caseCharacterView_Walk:

[selftickWalk];

break;

caseCharacterView_PrepareJump:

[selftickPrepareJump];

break;

caseCharacterView_Jump:

[selftickJump];

break;

caseCharacterView_PrepareLand:

[selftickPrepareLand];

break;

caseCharacterView_Land:

[selftickLand];

break;

caseCharacterView_Push:

[selftickPush];

break;

caseCharacterView_Pushing:

break;

caseCharacterView_EndPush:

[selftickEndPush];

break;

caseCharacterView_Swing:

caseCharacterView_SwingRelease:

[selftickSwing];

break;

caseCharacterView_Falling:

[selftickFalling];

break;

default:

[selfstop];

LOG(@"tick>>defaultcalledstop");

break;

}

[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

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1