0

私はCocos2Dで破壊可能な世界を作ろうとしていて、このテーマについて読んだことがありますが、それを正しく機能させる方法を本当に理解することはできません。

現在、非常に簡単なテストがあります。画面は黒く、タッチすると、CCRenderTextureでタッチした場所に白い円が描画されます。

これは私のテストです:

// Get the black background

- (CCSprite *)sprite
{
    CGSize winSize = [CCDirector sharedDirector].winSize;
    self.renderTexture = [CCRenderTexture renderTextureWithWidth:winSize.width height:winSize.height];
    [self.renderTexture beginWithClear:0.0 g:0.0 b:0.0 a:1.0];
    [self.renderTexture end];
    return [CCSprite spriteWithTexture:self.renderTexture.sprite.texture];
}

- (void)generateBackground
{
    background = [self sprite];

    CGSize winSize = [CCDirector sharedDirector].winSize;
    background.position = ccp(winSize.width/2, winSize.height/2);

    [self addChild:background z:-1];
}

// Draw the white circle

- (void)generateExplosionWithTouch:(UITouch *)touch
{
    [self.renderTexture begin];

    CGPoint location = [touch locationInView:touch.view];
    location = [self convertToNodeSpace:location];

    ccDrawCircle(location, 30.0, 5.0, 360, NO);

    [self.renderTexture end];
}

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch * touch = [touches anyObject];
    [self generateExplosionWithTouch:touch];
}

黒の背景を追加した後、スプライトを追加します。

CGSize winSize = [CCDirector sharedDirector].winSize;
self.icon = [CCSprite spriteWithFile:@"Icon.png"];
self.icon.position = ccp(winSize.width / 2, winSize.height / 2);
[self addChild:self.icon];

ある種のピクセル衝突チェックでスプライトが白黒領域にあるかどうかをチェックする簡単な方法はありますか?

この質問は以前にも見たことがありますが、答えは常に「黒または白の領域にあるかどうかを単純な黒/白の画像で確認してください」のようなものでした。:P

ありがとうございました、

リック

4

1 に答える 1

1

ピクセルの衝突チェックを行いたい場合は、コードとリファレンスを含む 2 つの部分からなるチュートリアルをここで見つけることができます。

代替アプローチの 1 つとして、次のようなものがあります。

  1. CCRenderTexture を使用してレンダリングを行います (現在行っているように)。

  2. CCRenderTexture をレイヤー/親ノードに追加する代わりに、そこからスプライトを作成します。

        return [CCSprite spriteWithTexture:renderTexture.sprite.texture];
    

    これをレイヤー/親に追加します。

このようにすることで、すべての爆発をスプライトで表現し、衝突チェックを行うことができます。

ちなみに、私が提案するアプローチでは、爆発ごとに新しい CCRenderTexture を作成します。

別のアプローチは、現在行っているのと同じように行うことです。つまり、1 つの CCRenderTexture を使用してその中にすべてを描画すると同時に、爆発 CCNodes のリストも保持します (つまり、レイヤー/親に CCNode を追加して各爆発)。次に、CCNodes で衝突検出を行います。

于 2012-08-11T08:17:11.373 に答える