ndg*_*ndg 5 iphone struct objective-c nsarray
我正在开发一款需要单屏平面图的基本iPhone游戏.那里没什么难的.我来自C背景,所以我目前的解决方案看起来有点像这样:
typedef struct _Tile {
NSString *type;
} Tile;
@interface Map {
Tile mapData[MAP_TILE_MAX_X][MAP_TILE_MAX_Y];
}
Run Code Online (Sandbox Code Playgroud)
这很好,但我想知道是否有一种更"正确"的方式来处理Objective-C的事情.如果我采用Objective-C方法,我会看到情况如何:我将创建一个基本的Tile类来保存基本的tile属性,然后我可以为特定的tile类型(@interface Water : Tile {}例如)创建子类.这将允许我也具有特定于Tile的逻辑.例如:Tile类可以有一个'think'方法来执行任何必要的逻辑.在我的Water子类中,如果玩家被淹没,这可能会产生涟漪效应.
我的问题是:
你问题的第二部分更容易解决,所以我将首先解决这个问题。
在运行时动态实例化任意类的对象可以使用NSClassFromString()
假设你的 WaterTile 是 UIView 的子类(这似乎是有道理的,因为它很可能被绘制在屏幕上)
UIView *newTile = [[NSClassFromString([NSString stringWithFormat:@"%@TileView", [@"water" capitalizedString]]) alloc] init];
Run Code Online (Sandbox Code Playgroud)
现在是第一部分。
鉴于图块是您想要在屏幕上绘制的东西,您将通过继承 UIView 受益于所有 OO 优点,UIView 将响应触摸事件并具有定位和绘制所需的方法。这是与使用图块结构相比的主要优点。
有可能,您正在考虑的抽象 Tile 类实际上并不需要,因为 UIView 提供的大多数属性和方法都使我认为您可能需要定义 a Tile @protocol。
@protocol TileViewDrawing
- (void)drawThinking;
@end
@interface WaterTileView : UIView <TileViewDrawing>
@end
@implementation WaterTileView
-(void)drawThinking
{
// Code to show rippling effect
}
@end
Run Code Online (Sandbox Code Playgroud)
Map要在定义NSArray(行)的NSArrays(列)中创建二维数组
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |