Sparrow 开源iOS游戏开发引擎

来源:互联网 发布:js 数组排序函数 编辑:程序博客网 时间:2024/06/04 19:07
Sparrow是一个轻量级的开源Objective-C游戏库,用于开发iOS设备上的游戏。相当于cocos2d来说,sparrow足够轻量级,部署方便,能够满足一般游戏的开发需求。
项目地址:https://github.com/Gamua/Sparrow-Framework

预备工作
1、在Xcode project references中创建到sparrow引擎的链接。
2、导入API提示,在Xcode preferences 中的 “Documentation” tab里,添加
     http://doc.sparrow-framework.org/core/feed/docset.atom
2、以scaffold为项目框架,选择好目标设备。

项目最简单的框架,两个最关键的类:
AppDelegate类
@interface AppDelegate : NSObject <UIApplicationDelegate> @end@implementation AppDelegate{    SPViewController *_viewController;//创建了一个Sparrow视图控制对象    UIWindow *_window;}- (BOOL)application:(UIApplication *)application         didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{    // create a full-screen window    CGRect screenBounds = [UIScreen mainScreen].bounds;    _window = [[UIWindow alloc] initWithFrame:screenBounds];     // start up Sparrow    _viewController = [[SPViewController alloc] init];    [_viewController startWithRoot:[Game class] supportHighResolutions:YES doubleOnPad:YES];     // activate the window    [_window setRootViewController:_viewController];    [_window makeKeyAndVisible];     return YES;}@end
Game类
@interface Game : SPSprite@end@implementation Game- (id)init{    if ((self = [super init]))    {        // 在这里进行游戏对象的初始化        // 这个例子中创建了一个方块        SPQuad *quad = [SPQuad quadWithWidth:100 height:100];        quad.color = 0xff0000; // 0xRRGGBB -> this is red        quad.x = 50;        quad.y = 50;        [self addChild:quad];    }    return self;}@end
一、对象的显示
对象的显示采用Display Tree的策略按层次添加和显示对象。将一个对象创建为容器对象(SPSprite 或 SPDisplayObjectContainer),就可以包含子对象。对象之间具有从属关系或并列关系。

SPImage和SPTexture对象
如果一张图片创建为SPTexture对象,程序会将图像二进制信息持久存储在内存中,方便重复快速的使用。如果图片创建为SPImage对象,每次显示都需要重新调入到内存来。

文本对象
文本由SPTextField类创建,默认使用设备自身的字体。
SPTextField *textField = [SPTextField textFieldWithWidth:145 height:80     text:@"Text" fontName:@"Helvetica" fontSize:12.0f color:0xff0000];textField.hAlign = SPHAlignRight;  // horizontal alignmenttextField.vAlign = SPVAlignBottom; // vertical alignmenttextField.border = YES;
宏定义
角度
float degrees = SP_R2D(PI);  // -> 180.0ffloat radians = SP_D2R(180); // -> PI
颜色
uint yellow = SP_COLOR(255, 255, 0); // -> 0xffff00
或者
// format:   0xRRGGBBuint red   = 0xff0000;uint green = 0x00ff00; // or 0xff00uint blue  = 0x0000ff; // or 0xffuint white = 0xffffff;uint black = 0x000000; // or simply 0
浮点数比较
float f = 0.00001f;bool isNearlyZero = SP_IS_FLOAT_EQUAL(f, 0.0f); // -> true

二、事件处理
下面的例子中,在Game对象的初始化函数中为一个SPButton对象添加触发事件响应。
@implementation Game{    SPButton *_button;}- (id)init{    if (self = [super init])    {        // 创建按钮        SPTexture *buttonTexture = [SPTexture textureWithContentsOfFile:@"button.png"];        _button = [SPButton buttonWithUpState:buttonTexture];        [self addChild:_button];         // 为按钮添加触发事件响应        [_button addEventListener:@selector(onButtonTriggered:) atObject:self                          forType:SP_EVENT_TYPE_TRIGGERED];    }    return self;}//对事件的响应- (void)onButtonTriggered:(SPEvent *)event{    NSLog(@"The button was triggered!");}- (void)dealloc{     //当不再监听该事件时,删去事件监听    [_button removeEventListenersAtObject:self forType:SP_EVENT_TYPE_TRIGGERED];}

常见的事件有:
  • SP_EVENT_TYPE_TRIGGERED: a button was triggered
  • SP_EVENT_TYPE_TOUCH: a touch event occurred 
  • SP_EVENT_TYPE_ADDED: a display object was added to a container
  • SP_EVENT_TYPE_ADDED_TO_STAGE: a display object was added to a container that is connected to the stage
  • SP_EVENT_TYPE_REMOVED: a display object was removed from a container
  • SP_EVENT_TYPE_REMOVED_FROM_STAGE: a display object lost its connection to the stage
  • SP_EVENT_TYPE_ENTER_FRAME: some time has passed, a new frame is rendered
  • SP_EVENT_TYPE_COMPLETED: a sound or movie clip finished playback
0 0
原创粉丝点击