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

如果您想进行像素碰撞检查,您可以在此处找到包含代码和参考的两部分教程

一种替代方法可能是:

  1. 您使用 CCRenderTexture 进行渲染(就像您现在所做的那样);

  2. 您无需将 CCRenderTexture 添加到您的图层/父节点,而是从中创建一个精灵:

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

    并将这个添加到您的图层/父级。

通过这样做,您将拥有由精灵表示的所有爆炸,然后您可以进行碰撞检查。

顺便说一句,在我建议的方法中,您为每次爆炸创建一个新的 CCRenderTexture。

另一种方法就像您现在所做的那样,即使用一个 CCRenderTexture 并在其中绘制所有内容,同时还保留一个爆炸 CCNode 列表(即,您还向您的图层/父级添加一个 CCNode每次爆炸)。然后你会在 CCNodes 上进行碰撞检测。

于 2012-08-11T08:17:11.373 回答