Sparrow 开源iOS游戏开发引擎

裴姚石
2023-12-01
Sparrow是一个轻量级的开源Objective-C游戏库,用于开发iOS设备上的游戏。相当于cocos2d来说,sparrow足够轻量级,部署方便,能够满足一般游戏的开发需求。
项目地址:https://github.com/Gamua/Sparrow-Framework

预备工作
1、在Xcode project references中创建到sparrow引擎的链接。
2、导入API提示,在Xcode preferences 中的 “Documentation” tab里,添加
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 alignment
textField.vAlign = SPVAlignBottom; // vertical alignment
textField.border = YES;
宏定义
角度
float degrees = SP_R2D(PI);  // -> 180.0f
float radians = SP_D2R(180); // -> PI
颜色
uint yellow = SP_COLOR(255, 255, 0); // -> 0xffff00
或者
// format:   0xRRGGBB
uint red   = 0xff0000;
uint green = 0x00ff00; // or 0xff00
uint blue  = 0x0000ff; // or 0xff
uint 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
 类似资料: