260 likes | 473 Views
iPhone 系统 应用与开发. -- 制作 iPhone 游戏菜单. 李云玮. 回顾. --Iphone 的控件有哪些? --Iphone 控件的层次结构? -- 如何对控件作出响应?. 教学分析. 上节课我们添加了 Library 库中提供的常用控件并能够作出响应,同时掌握真机调试的过程,这节课我们要正式创建游戏项目,并设计游戏中的菜单页类。 学生分小组讨论并回答. 新任务介绍. 学习 UIView 学习 Objective-C 语言及内存机制 建立类文件. 任务目标. 知识准备. 如何使用 UIView ? 什么是内存机制?
E N D
iPhone系统 应用与开发 -- 制作iPhone游戏菜单 李云玮
回顾 --Iphone的控件有哪些? --Iphone控件的层次结构? --如何对控件作出响应?
教学分析 上节课我们添加了Library库中提供的常用控件并能够作出响应,同时掌握真机调试的过程,这节课我们要正式创建游戏项目,并设计游戏中的菜单页类。 学生分小组讨论并回答
新任务介绍 学习UIView 学习Objective-C语言及内存机制 建立类文件
知识准备 如何使用UIView? 什么是内存机制? 以小组形式收集信息学习讨论
任务实施 -- 制作iPhone游戏菜单
在项目BallHole中,首先建立新的类文件,在Classes上点击右键,选择Add New File…增加新文件。
选择将要增加的新文件为Cocoa Touch Class,选择新建的类文件为Objective-C的类文件。并在下放的Subclass of…选项中选择这个类继承自NSObject.
最后需要为新建立的类命名。建议命名方式为大写英文字母做头字母。目前我们将新建立的类命名为MenuViewController。即菜单页的控制器。最后需要为新建立的类命名。建议命名方式为大写英文字母做头字母。目前我们将新建立的类命名为MenuViewController。即菜单页的控制器。
我们已经建立好了新的类MenuViewController。 下面我们建立分组,来整理代码。 在Classes上点击右键,选择Add New Group建立新的分组。
到此为止我们已经建立了MenuViewController类,并将其放到了对应的分组。到此为止我们已经建立了MenuViewController类,并将其放到了对应的分组。
MenuViewController类作用 程序的主菜单界面。里面实例化了各种主界面控件,包括: 实例化背景图片,并加载到本类的view上。 UIImageView *myImageView=[[UIImageView alloc] initWithFrame:self.view.frame]; [myImageView setImage:getPNGImage(@"MenuBack")]; [self.view addSubview:myImageView]; 实例化开始游戏的按钮,并加载到本类的view上。 btnStartGame=[[UIButton alloc] initWithFrame:CGRectMake(0,0,200,50)]; [self.view addSubview:btnStartGame]; [btnStartGame release];
添加初始化函数 在MenuViewController实现文件的@implementation 和 @end之间,实现初始化函数。 - (id) init { //首先完成super类,即UIViewController类的初始化工作 self = [super init]; //如果完成了父类的初始化工作,即初始化后的对象不再为空 if (self != nil) { //则进行个性化的初始化工作。 } //返回已经被初始化后的对象 return self; }
第一步为对象分配内存,操作系统会根据创建的类的信息来决定为对象分配多少内存,分配格式如下:第一步为对象分配内存,操作系统会根据创建的类的信息来决定为对象分配多少内存,分配格式如下: Id 对象名=[类名 alloc]; 第二步在成功分配内存后,还要对内存进行初始化,指对实例变量的初始化,同时返回初始化后的对象,格式如下: [对象名字 init];
一般嵌套使用:类对象名=[[类名 alloc] init]; 初始化的具体代码,重载父类的init: -init{ if(self=[super init])//由于某种原因初始化失败而返回nil {//初始化该类的实例变量} return self; }
MenuViewController类的对象初始化 在BallHoleAppDelegate.h中实例化MenuViewController类: #import<UIKit/UIKit.h> #import”MenuViewController.h” @interface BallHoleAppDelegate:NSObject<UIApplicationDelegate>{ UIWindow *window; MenuViewController *myMenuViewController; 在BallHoleAppDelegate.m中完成对象初始化: //程序启动后的回调函数,由于我们使用了UIApplicationDelegate代理,程序启动后会调用下面的函数,我们将对象初始化的代码放在此函数中,那么在程序启动后我们就可以初始化菜单视图。 -(void)applicationDidFinishLaunching:(UIApplicaiont *)application{ //将window对象设为程序的主窗口 [window makeKeyAndVisible]; //初始化myMenuViewController对象,作为程序的菜单界面 myMenuViewController=[[MenuViewController alloc] init]; }
实例化导航器控制器 在BallHoleAppDelegate.h中实例化导航器控制器: @interface BallHoleAppDelegate:NSObject<UIApplicationDelegate>{ UIWindow *window; UINavigationController *myNC; MenuViewController *myMenuViewController; } 在BallHoleAppDelegate.m中将菜单页添加至导航器控制器,并且将导航器控制器添加至窗口中 -(void)applicationDidFinishLaunching:(UIApplicaiont *)application{ //将window对象设为程序的主窗口 [window makeKeyAndVisible]; //实例化myMenuViewController对象,作为程序的菜单界面 myMenuViewController=[[MenuViewController alloc] init]; /初始化导航器对象,并且将菜单页作为导航器控制器的根页 myNC=[[UINavigationController alloc] initWithRootViewController:myMenuViewController]; //隐藏导航条 [myNC setNavigationBarHidden:YES]; //将导航器加载到窗口上 [window addSubview:myNC.view]; }
回收对象 当对象不再被使用时就必须回收,释放对象时会调用dealloc方法来释放对象,回收分配的内存。 -(void)dealloc{ [window release]; [myNC.view removeFromeSuperview] [myMenuViewController release]; [myNC release]; };
ScoresViewController类 • 显示分数的界面,通过UILabel来显示分数 • 实例化对象并初始化 • 添加初始化函数 • 实例化对象 • 初始化对象
GameViewController类 • 游戏运行的界面 • 实例化对象并初始化 • 添加初始化函数 • 实例化对象 • 初始化对象
拓展任务 利用学过的控件编写一个简单的程序。