我有一个带按钮和节点级别的场景,我在其中加载另一个场景(使用Sprite Builder创建的层):
-(void) didLoadFromCCB {
//the Gameplay Scene loaded
// tell this scene to accept touches
self.userInteractionEnabled = TRUE;
//load level in gameplay scene
CCScene *level = [CCBReader loadAsScene:@"Scenes/scene_01"];
[_levelNode addChild:level];
}
所有东西都在加载,我有一个带有常用按钮的游戏场景和一个带有精灵作为孩子的scene_01
。
现在我正在尝试检测来自scene_01
的精灵是否被触及。我可以跟踪_levelNode
上是否发生了触摸:
- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint _touchLocation = [touch locationInNode:_levelNode];
CCLOG(@"levelNode touched");
// Define which touched Object
if (CGRectContainsPoint([_part01 boundingBox], _touchLocation))
{
_part01.position = _touchLocation;
_touchingPart01 = YES;
_touchPoint = _touchLocation;
CCLOG(@"_part01 touched");
}
}
但上面代码的第二部分不起作用,控制台说根本找不到精灵:
[1531:60b] CCBReader: Couldn't find member variable: _part01
我的结论是 - 父场景无法访问加载场景中的精灵,问题是:
让游戏切换到子节点的节点是一个好习惯:级别而不是将级别加载为场景吗?
如果是 - 如何管理该级别内的对象,我是否需要更精确的选择器? (例如:if (CGRectContainsPoint([***level.***_part01 boundingBox], _touchLocation)))
我想我可以创建.ccb
个文件并创建类来描述Cocos中的这些精灵,但是每个级别会有5个精灵和几十个级别,这意味着我会得到50个以上的课程,我相信它不是创建游戏的好方法。 (由于缺乏技能,我不能为部分创建一个类并将其链接更改为sprite。)
答案 0 :(得分:0)
经过一些挖掘和修改我接下来要做的问题:
Gameplay.m
-(void) didLoadFromCCB {
// tell this scene to accept touches
self.userInteractionEnabled = TRUE;
//load level
CCScene *level = [CCBReader loadAsScene:@"Scenes/scene_01"];
[_levelNode addChild:level];
}
Scene_01.m
@implementation Scene_01 {
CCSprite *_part01;
...}
-(void) didLoadFromCCB {
// tell this scene to accept touches
self.userInteractionEnabled = TRUE;
}
- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint _touchLocation = [touch locationInNode:self];
// Define which touched Object
if (CGRectContainsPoint([_part01 boundingBox], _touchLocation))
{
//some action if _part01 is touched
CCLOG(@"_part01");
}
}
现在这对我有用。我从一开始就没有这样做的原因,接下来是我的步骤:
我的精灵名为_part01,...并分配给" Doc root var" (在Sprite Builder中),让它们可以访问scene_01但是当我命名那个场景的根节点时,我的项目在构建时崩溃,所以我认为这是因为命名节点不能作为子节点添加到其他场景(在Xcode)。
将变量分配更改为"不要分配"并且错误:[1531:60b] CCBReader: Couldn't find member variable: _part01
从日志中消失了,所以这就是关于我使用的对象的链接,而不是关于访问它们。
退后一步,重复为这个场景创建类,在该类中移动逻辑,将场景作为孩子添加到Gameplay场景中 - 瞧,它有效!
P.S。我现在仍然不确定为什么它现在第一次没有工作,寻找任何可能有助于理解这种情况的评论。感谢。