将Hud图层添加到场景Cocos2d-3

用户名

为简单起见,最简单的方法是在默认的HelloWorld Scene中将默认的[Menu]作为自己的图层。我现在遇到的问题是场景完全是黑色的,什么都没有出现!

GameLayer节点:

- (id)init
{
    // Enable touch handling on scene node
    self.userInteractionEnabled = YES;
    self.theMap     =   [CCTiledMap tiledMapWithFile:@"AftermathRpg.tmx"];

    self.contentSize = theMap.contentSize;

    self.metaLayer = [theMap layerNamed:@"Meta"];
    metaLayer.visible = NO;

    CCTiledMapObjectGroup *objects  =    [theMap objectGroupNamed:@"mainChar"];
    NSMutableDictionary *startPoint =    [objects objectNamed:@"startPosition"];
    int x = [[startPoint valueForKey:@"x"] intValue];
    int y = [[startPoint valueForKey:@"y"] intValue];

    self.mainChar     = [CCSprite spriteWithImageNamed:@"mainChar.png"];
    mainChar.position = ccp(x,y);
    [self addChild:mainChar];

    [self addChild:theMap z:-1];
    [self setCenterOfScreen: mainChar.position];

    return self;
}

HudLayer节点

-(id)init
{
    CGSize winSize = [[CCDirector sharedDirector] viewSize];


    CCButton *backButton = [CCButton buttonWithTitle:@"[ Menu ]" fontName:@"Verdana-Bold" fontSize:18.0f];
    backButton.position = ccp(0.85f * winSize.width, 0.95f * winSize.height);
    [backButton setTarget:self selector:@selector(onBackClicked:)];
    [self addChild:backButton];

    return self;
    }

场景

+ (GameScene *)scene
{

    return [[self alloc] init];
}    
- (id)init
{
    // Apple recommend assigning self with supers return value
    self = [super init];
    if (!self) return(nil);

    CGSize winSize = [CCDirector sharedDirector].viewSize;

    self.gameLayer = [GameLayer node];
    [self addChild:gameLayer z:-1];

    //self.contentSize = self.gameLayer.contentSize;
    hudLayer = [HudLayer node];
    hudLayer.position = ccp(winSize.width * 0.9, winSize.height * 0.9);

    [self addChild:hudLayer z:1];


    return self;
}
艾伦·S

从OP中,我认为您有两个问题,其中一个是HUD不是静态的(即,它随着地图的移动而移动,这是您不希望的),并且HUD不在屏幕的顶部。

首先查看职位问题,您的职位已设置为归一化。由于场景的内容大小已设为地图的大小(我所选择的大小大于屏幕的大小),因此这就是为什么它显示在地图的右上角而不是屏幕上的原因。要解决此问题,请不要进行标准化定位。如果您仍然希望在0到1范围内表示位置,请使用(也删除将位置类型设置为归一化的行):

CGSize winSize = [[CCDirector sharedDirector] viewSize];
backButton.position = ccp(0.85f * winSize.width, 0.95f * winSize.height);

如果您的地图是10,000 x 10,000,则使用归一化的位置(如您所愿)将按钮设置为(8,500,9,500),而不是屏幕顶部。

接下来看静态问题,从它的外观看,您是否拥有Hello World场景,您将所有内容添加到正确的位置?看起来您正在通过以下方式移动Hello World场景:

[self setCenterOfScreen: player.position];

您想要做的是,首先要有一个场景:

HelloWorldScene* scene;

并向该场景添加两个“主要”层,其中一个是您的游戏层,作为主要游戏层的子级,另一层是您的HUD层,例如,可能类似于:

GameplayLayer* gameLayer;
HudLayer* hudLayer;

[scene addChild:gameLayer];
[scene addChild:hudLayer];

当玩家移动(或相机或其他任何东西)时,应该移动的是游戏的图层,而不是Hello World的根场景。移动根场景将移动它的所有子级,其中包括hud。那不是你想要的。

例如,当我从事Goldfish Mysteries应用程序(https://itunes.apple.com/us/app/finn-friends-mysteries/id740040227?mt=8)时,我基本上具有以下层次:

  • 故事(由bg,字符等多个子层组成)
  • 文字(与旁白音频一起播放的突出显示的文字)
  • HUD(由多个子层组成)

每当故事级别上发生移动时,它就会在故事层上发生。当出现HUD时,如果正在播放文字和故事层(即他们和他们的所有孩子)以及旁白音频,则它们将递归暂停(如果他们正在播放,但HUD层保持不变)。恢复包括恢复故事,文本和任何播放旁白。我不记得是否放掉平视显示器使该特定应用程序中的故事和文本层向下移动,因为我没有iPad在我面前,但是我过去做过的应用程序使放平视显示器改变了一切其他层。在那种情况下,对于一个简单的应用程序来说,移动场景会很好,因为场景只能移动到足以显示TOC的程度(例如,在这种类型的应用程序中)。您要做的就是随着玩家的移动来移动整个场景,

无论哪种方式,您都希望在层和仅在特定层上发生的操作之间实现清晰的分隔,应该只针对那些层。

希望这对您有所帮助。

更新(已编辑):

根据新编辑的OP,您遇到了一个新问题。对于hud,您不必设置图层的位置,因为在hud图层内部,相对于屏幕的所有内容都已经摆好了。因此,您应该拥有的是:

hudLayer = [HudLayer node];
[self addChild:hudLayer z:1];

第二个问题是您没有为游戏和Hud图层类正确编写init方法。初始化应如下所示:

- (instanceType)init
{
    self = [super init];

    if (self)
    {
        // Do your init stuff...
    }

    return self;
}

您永远不会打电话:

self = [super init];

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将2D精灵动画添加到cocos3D场景?

来自分类Dev

设置CCLabelTTF在CCNode中的位置并添加到CCScene [cocos2d v3]

来自分类Dev

无法添加到场景 - 伪造查看器。错误:“THREE.Object3D.add:对象不是 THREE.Object3D 的实例。”

来自分类Dev

如何使用场景将注释添加到scatter3D Plotly图?

来自分类Dev

使用UIImagePickerController类后,Cocos2d V3无法切换场景

来自分类Dev

将Cocos3D添加到现有的XCode / iOS项目

来自分类Dev

在cocos2d v3中创建填充有图像图案的图层的最简单方法

来自分类Dev

Cocos2D 3.x一次仅在场景中显示一个精灵

来自分类Dev

SpriteKit:将多个SKSpriteNodes添加到场景中

来自分类Dev

MouseEvent-将圆添加到场景

来自分类Dev

将节点添加到场景视图的问题

来自分类Dev

无法将精灵添加到场景

来自分类Dev

MouseEvent-将圆添加到场景

来自分类Dev

Scala,将2d数组添加到3d数组

来自分类Dev

将 3D 子图添加到 2D 集

来自分类Dev

将 2D 数组添加到 3D 数组

来自分类Dev

新的Cocos2D 3.x API?

来自分类Dev

Cocos2d 3(模糊)着色器

来自分类Dev

Cocos2d v3:如何绘制圆弧?

来自分类Dev

Cocos2D v3 CCTableView不滚动

来自分类Dev

新的Cocos2D 3.x API?

来自分类Dev

Cocos2d 3(模糊)着色器

来自分类Dev

Cocos2d v3图像命名约定

来自分类Dev

D3-将背景填充添加到矩形

来自分类Dev

d3将拖放添加到填充圆圈

来自分类Dev

将工具提示添加到d3散点图

来自分类Dev

将点添加到d3 SVG贴图

来自分类Dev

将3D对象添加到ARGeoAnchor

来自分类Dev

将工具提示添加到d3散点图