gpt4 book ai didi

ios - Cocos2D - 最好保留 CGRect 数组或 CCSprite 数组来跟踪命中区域?

转载 作者:行者123 更新时间:2023-11-29 04:28:42 24 4
gpt4 key购买 nike

我正在 cocos2d 中制作一个简单的棋盘游戏来入门。为了跟踪用户点击,我打算监听游戏方 block 上的点击,而不是游戏片段,以简化跟踪游戏片段。这将是 8x8 板。

是否更有效:

一个。创建一个 CGRect 数组来进行测试,并且需要在添加到数组之前将该结构放入 NSObject 中。接缝很简单,但看起来每次需要时都需要进行大量工作来访问 CGRect。

B.制作实际的 CCSprite 并针对其边界矩形进行测试。代码简单,但屏幕上有额外的 64 个不需要的视觉对象,导致内存使用膨胀。

甚至

C.其他一些方法,我从根本上误解了这个工具。

最佳答案

我同意,如果你的棋盘是完全静态的,那么似乎没有必要为棋盘上的每个游戏方 block 创建一个 Sprite 。

但是 CGRect 不是对象类型,因此它不能添加到 NSMutableArray 中,而且我还会假设在某些时候您会想要对游戏方 block 执行其他操作,例如突出显示它们和其他内容。我建议你创建一个名为 GameSquare 的类,它继承自 CCNode 并将它们放入一个数组中:

// GameSquare.h

@interface GameSquare : CCNode {
//Add nice stuff here about gamesquares and implement in GameSquare.m
}

之后,您可以创建游戏方 block 作为节点:

// SomeLayer.h
@interface SomeLayer : CCLayer {
NSMutableArray *myGameSquares;
GameSquare *magicGameSquare;
}

@property (nonatomic, strong) GameSquare *magicGameSquare;

// SomeLayer.m

/* ... (somewhere in the layer setup after init of myGameSquares) ... */

GameSquare *g = [[GameSquare alloc] init];
g.position = CGPointMake(x,y); //replace x,y with your coordinates
g.size = CGSizeMake(w,h); //replace w,h with your sizes

[myGameSquares addObject:g];

self.magicGameSquare = [[GameSquare alloc] init];
magicGameSquare.position = CGPointMake(mX,mY); //replace with your coordinates
magicGameSquare.size = CGSizeMake(mW,mH); //replace with your sizes

之后,您可以像这样对游戏方 block 进行 HitTest (在您的 CCLayer 子类中):

// SomeLayer.m
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint location = [self convertTouchToNodeSpace: touch];

// Example of other objects that user might have pressed
if (CGRectContainsPoint([magicSquare getBounds], location)) {
// User pressed magic square!
[magicSquare doHitStuff];
} else {
for (int i=0; i<myGameSquares.count; i++) {
GameSquare *square = [myGameSquares objectAtIndex:i];

if (CGRectContainsPoint(square.boundingBox, location)) {
// This is the square user has pressed!
[square doHitStuff];
break;
}
}
}

return YES;
}

是的,您必须查看列表,但除非玩家可以一次按下多个方 block ,否则您可以在找到正确的方 block 后立即停止搜索,如示例中所示。

(假设使用 ARC)

PS。如果您在某些时候需要为 GameSquare 添加任何 Sprite ,只需在您的 GameSquare 类中添加一个 CCSprite 成员并引用即可。

关于ios - Cocos2D - 最好保留 CGRect 数组或 CCSprite 数组来跟踪命中区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11991811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com