iPhone游戏引擎CWGameEngine之一(创建全屏自定义窗口)
作者:孙东风 2009-11-14(请尊重作者劳动成果,转载务必注明出处)
笔者在前面的系列文章中依次讲解了iPhone多线程、iPhone数据持久化、iPhone网络通讯BSD Socket等内容,接下来笔者会讲解如何从头搭建一个自己的游戏引擎。
根据iPhone官方的统计,App Store中游戏类应用是最多的,大概是其它应用总和的1 .5倍,在排行前20的应用中,游戏类应用超过14个。
iPhone窗口系统如下:
ü UIKit.framwork
² UIScreen
² UIWindow
² UIView
ü QuartzCore.framework
² CALayer
² CAEAGLLayer
本文主要讲解UIKit.framework图形框架,其中UIScreen提供了屏幕的基本系统,定义如下:
//
// UIScreen.h
// UIKit
//
// Copyright 2007-2009 Apple Inc. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <CoreGraphics/CoreGraphics.h>
#import <UIKit/UIKitDefines.h>
UIKIT_EXTERN_CLASS @interface UIScreen : NSObject {
@private
CGRect _bounds;
}
+ (UIScreen *)mainScreen;
@property(nonatomic,readonly) CGRect bounds; // Bounds of entire screen in points
@property(nonatomic,readonly) CGRect applicationFrame; // Frame of application screen area in points (i.e. entire screen minus status bar if visible)
@end
这个类提供了屏幕的bounds(即可绘制区域drawable),屏幕的尺寸和位置,而接口mainScreen()获取当前窗口的主屏幕。
UIWindow是UIView的子类,UIView是所有屏幕视图的SuperClass,比如UIButton、UILabel、UIImageView等,UIView类中定义如下:
…
@property(nonatomic,readonly) UIView *superview;
@property(nonatomic,readonly,copy) NSArray *subviews;
@property(nonatomic,readonly) UIWindow *window;
- (void)removeFromSuperview;
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;
- (void)addSubview:(UIView *)view;
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
- (void)bringSubviewToFront:(UIView *)view;
- (void)sendSubviewToBack:(UIView *)view;
- (void)didAddSubview:(UIView *)subview;
- (void)willRemoveSubview:(UIView *)subview;
- (void)willMoveToSuperview:(UIView *)newSuperview;
- (void)didMoveToSuperview;
- (void)willMoveToWindow:(UIWindow *)newWindow;
- (void)didMoveToWindow;
…
可见,利用UIView类可以获取当前视图的“父视图”、“子视图数组”,还可以添加一个“子视图”到当前的视图、删除“子视图”、插入“子视图”等操作。
它们的继承关系如下图:
UIResponder – UIView – 自定义视图
|
UIButton、UILabel、UIImageView等
本文的主要任务是创建一个全屏显示的自定义窗口。
新建一个“Window-based Application”项目,输入项目名字“CrazyWindGameEngine”,然后Build&Go可以看到一个浅灰色背景的屏幕,这个默认的屏幕存在几个问题:
首先需要隐藏“Status Bar”,这个通过在CrazyWindGameEngine-info.plist中添加“Status
相关新闻>>
- 发表评论
-
- 最新评论 更多>>