330 likes | 537 Views
iPhone 系统 应用与开发. -- 制作 iPhone 游戏菜单. 李云玮. 回顾. -- 如何使用 UIView ? -- 如何理解 Objective-C 语言的内存机制?. 教学分析. 上节课我们学习了 objective-C 语言及它的内存机制,学习了 UIView 的使用方法,同时还建立了类文件。这节课我们在建立的类文件的基础上建立游戏的各个角色类。 学生分小组讨论并回答. 新任务介绍. 制作游戏角色基类 制作游戏主角类 制作游戏其他角色类. 任务目标. 知识准备. 如何建立角色基类? 以小组形式收集信息学习讨论. 任务实施.
E N D
iPhone系统 应用与开发 -- 制作iPhone游戏菜单 李云玮
回顾 --如何使用UIView? --如何理解Objective-C语言的内存机制?
教学分析 上节课我们学习了objective-C语言及它的内存机制,学习了UIView的使用方法,同时还建立了类文件。这节课我们在建立的类文件的基础上建立游戏的各个角色类。 学生分小组讨论并回答
新任务介绍 制作游戏角色基类 制作游戏主角类 制作游戏其他角色类
知识准备 如何建立角色基类? 以小组形式收集信息学习讨论
任务实施 -- 制作iPhone游戏菜单
单元二 搭建游戏所必须的各个页的类
HeroView类介绍 实现了游戏主角的移动: 根据自身的x_speed,y_speed进行移动。 - (void)move { float newX=self.center.x; float newY=self.center.y; self.center=CGPointMake(newX,newY); }
HeroView类介绍 并实现了死亡后的动画效果,原地变小。使用函数 CGAffineTransformScale(CGAffineTransformMakeRotation(0),1/1000.0,1/1000.0); 来使得自身变为原始大小的千分之一。
HeroView类介绍 并通过[UIView setAnimationDidStopSelector: @selector(doAfterHideAndBecomeSmall)]; 设置动画效果结束后调用的函数doAfterHideAndBecomeSmall。 这样主角消失后,就会运行doAfterHeroHide函数。
建立HeroView类 1.建立文件,命名为HeroView,修改父类为BasicRoleView 2.分析小球运动行为:开始游戏后,小球开始移动(move),碰到砖块小球回退(moveback),碰到黑洞(敌人)小球变小消失(hideAndBecomeSmall),小球消失后判断如果命数小于1,执行游戏结束的操作,如果命数不小于1,重置小球的大小位置透明度等变量(resetSizePositionAndAlpha)重新开始游戏。 3.声明此4个方法
建立HeroView类 3.同时,小球消失后,需运行doAfterHideAndBecomeSmall函数来执行小球消失后的动作。我们可以把该函数设置为代理函数。
建立宏定义文件 1.建立Group,命名BasicSupport; 2.建立文件,继承自NSObject,命名为CONSTANT.m,保留CONSTANT.h,删除CONSTANT.m,建立游戏中的宏定义。 3.建立文件,继承自NSObject,命名为BasicFunctions.m,建立游戏中保存和计算的类函数。
宏定义 #define WidthAndHeighOfRect 20 //砖块的长宽,游戏中每一格的大小 #define SCREEN_WIDTH 320 //屏幕宽 #define SCREEN_HEIGHT 480 //屏幕高 #define AnimationHeroHideAndBecomeSmallTime 2.0 //小球变小并消失的动画持续时间
小球运动函数的实现 使用UIImage作为参数,进行初始化 根据当前速度进行移动 回退 小球隐藏并且变小 重置小球的大小位置透明度等变量 隐藏并且变小的动画结束时的回调函数
定义协议 小球(游戏主角)的协议,包含了doAfterHeroHide函数。 @protocol HeroViewDelegate //小球消失后的回调函数 - (void)doAfterHeroHide; @end
定义代理对象 @interface HeroView : BasicRoleView { //定义代理对象,可以理解位id<协议名称>是代理对象的固有写法 id<HeroViewDelegate> delegate; } //将代理对象设置为属性 @property(nonatomic,assign) id<HeroViewDelegate> delegate;
执行协议 在GameViewController.h中: #import “HeroView.h” @Interface GameViewController:UIViewController <HeroViewDelegate>{} 在GameViewController.m中实现HeroViewDelegate协议的方法doAfterHeroHide: -(void)doAfterHeroHide{ 具体请参见代码 }
RectView类介绍 游戏中的砖块。实现了判断与主角相撞的函数。
建立砖块类RectView 1.建立文件,继承自UIView,命名为RectView,修改父类为BasicRoleView。 2.分析一下砖块在游戏过程中有哪些操作:游戏中砖块是静止不动的,而且它的子类终点和黑洞也是静止不动的,但小球是运动的,需要获取小球的位置判断是否与砖块、终点、黑洞等相撞,以做出相撞后的反应。首先通过自身的self.delegate,即GameViewController类中的getHeroPosition函数,获取主角的坐标。然后根据自身位置,判断是否与主角相撞,将结果返回。
实现砖块类函数 • 使用UIImage作为参数,进行初始化
定义协议 砖块的协议,包含了获取小球坐标getHeroPosition的函数。 @protocol RectViewDelegate -(CGPoint)getHeroPosition; @end
定义代理对象 @interface HeroView : BasicRoleView { //定义代理对象,可以理解位id<协议名称>是代理对象的固有写法 id<RectViewDelegate> delegate; } //将代理对象设置为属性 @property(nonatomic,assign) id<RectViewDelegate> delegate;
执行协议 在GameViewController.h中: #import “HeroView.h” @Interface GameViewController:UIViewController <HeroViewDelegate ,RectViewDelegate>{} 在GameViewController.m中实现RectViewDelegate协议的方法getHeroPosition: -(CGPoint)getHeroPosition{ //待完成 }
终点类介绍 • GoalView类:继承自RectView,用于实例化终点对象。
建立终点类 1.建立文件,继承自UIView,命名为GoalView,修改父类为RectView。 2.使用UIImage作为参数,进行初始化
黑洞类介绍 EnemyView类:继承自RectView,用于实例化黑洞对象。
建立黑洞类 1.建立文件,继承自UIView,命名为EnemyView,修改父类为RectView。 2.使用UIImage作为参数,进行初始化
拓展任务 仿照学过的内容,独立设计一款游戏,建立出游戏中所需的各种角色类