我一直在使用cocos2d-x编写游戏,并遇到了改变背景颜色的问题.我在cocos2d中找到了一个例子,但显然这仅适用于用Obj-c编写的cocos2d.基本上这个想法是使用CCLayerColor而不是CCLayer,当构造函数被触发时设置颜色.
有谁知道如何更改cocos2d-x中的背景颜色?看起来很简单,我很确定我错过了一些明显的东西.
我有一些麻烦添加UIView到cocos2d v2.0,因为openGlView已被弃用我无法添加视图.我正四处寻找另一种方法,但我找不到任何东西.
谁能告诉我在所有cc层前添加UIView的新方法?或者我该如何做到这一点?
如何制作处理旋转的无限/重复世界,就像在这个游戏中一样:
http://bloodfromastone.co.uk/retaliation.html
我通过这样的层次结构编码了我的旋转移动世界:
场景
- mainLayer(CCLayer)
- rotationLayer(CCNode)
- positionLayer(CCNode)
rotationLayer和positionLayer具有相同的大小(现在为4000x4000像素).
我通过旋转rotationLayer来旋转整个世界,并通过移动positionLayer来移动整个世界,这样玩家总是在设备屏幕上保持居中,这是移动和旋转的世界.
现在我想做到这样,如果玩家到达世界的界限(世界被移动,以便世界界限进入与设备屏幕界限接触),那么世界被"包裹"到相反的界限这样世界就是无限的.如果世界不旋转那很容易,但现在它确实如此,我不知道如何做到这一点.我在数学和数学思考方面都很傻,所以我需要一些帮助.
现在我认为我不需要任何与cocos2d-iphone相关的帮助.我需要的是一些方法来计算我的球员是否超出了世界范围,然后以某种方式计算我必须给世界包裹世界的新位置.
我想我必须计算一个圆形的半径,这个圆形将成为我在广场世界中的代工,无论方形世界处于什么角度,都将确保可见的矩形(屏幕)始终位于世界广场.然后我需要一种方法来计算可见的矩形边界是否在边界圆之外,如果是这样的话,我需要一种方法来计算边界圆中的新相对位置以移动世界.所以说明我添加了5张图片.
可见矩形在旋转的方形世界内的边界内部:
可见矩形的顶部在旋转的方形世界中击中边界圆:
旋转的方形世界移动到相反的垂直位置,以便可见矩形的底部现在在旋转的世界内击中边界:
可见矩形顶部的另一个示例是在旋转的方形世界内点击边界以说明不同的场景:
再次旋转的方形世界移动到相反的垂直位置,以便可见矩形的底部现在在旋转的世界内击中边界:
在非旋转的情况下移动positionLayer是我弄清楚的数学,正如我所说,只要世界没有旋转,我就可以解决这个问题,但事实确实如此.移动/定位的world/CCNode(positionLayer)位于旋转的world/CCNode(rotationLayer)内.旋转的rotationLayer的锚点始终位于屏幕的中心,但是当移动的positionLayer位于旋转的rotationLayer内时,它会围绕rotationLayer的锚点旋转.然后我迷失了...当我将positionLayer向下移动以使其顶部边框击中屏幕顶部时我需要将该positionLayer包装为JohnPS描述但不是那么简单,我需要将其包裹在基于矢量的矢量中关于rotationLayer CCNode的旋转.这个我不知道该怎么做.
谢谢
Søren
我正在使用cocos2d中的CCVideoPlayer播放一段短视频,最后我正在捕捉视频的最后一帧,我正在使用UIView在屏幕上显示它,因为尝试在CCLayer上绘制它会使图像显示出来颜色略有不同.我想这是因为在cocos2d中绘制事物的方式与在UIView上绘制它们的方式不同.所以我需要一些方法来保持屏幕上的图像使用UIView,我需要能够在此视图之上绘制精灵等.所以我的问题是,有没有办法让CCLayer透明,以便仍然可以看到包含图像的UIView,然后使用CCLayer在图像上绘制?(PS我正在使用cocos2d v1.1.0-beta2b)
我在CCLayer中添加了这样一个孩子:
[self addChild:object1];
Run Code Online (Sandbox Code Playgroud)
后来我想从孩子们那里删除那个对象.嗯那我该怎么做?谢谢.
我有一个CCSprite
叫sprite
那就是一个孩子CCLayer
叫movingLayer
这本身就是当前的一个孩子CCLayer
跑我的游戏逻辑,所以self
在这种情况下. movingLayer
在一个重复的永远行动中来回穿过屏幕,sprite
并在它上面骑行.我想要sprite
"开始" movingLayer
并"继续"到self
它可以做自己的一些行动的地方.
当我尝试这样做时,我需要告诉movingLayer
删除sprite
并self
添加sprite.
这就是我所做的...
- (void)attack:(id)sender
{
[sprite stopAllActions];
[movingLayer removeChild:sprite cleanup:YES];
[self addChild:sprite z:1];
CGFloat distance = ccpDistance(sprite.position, ccp(sprite.position.x, -sprite.contentSize.height/2));
id goDown = [CCMoveTo actionWithDuration:distance/moveDuration position:ccp(sprite.position.x, -sprite.contentSize.height/2)];
id repeatDown = [CCRepeatForever actionWithAction:[CCSequence actions:[CCMoveTo actionWithDuration:0 position:ccp(sprite.position.x, sprite.contentSize.height/2+self.contentSize.height)], [CCMoveTo actionWithDuration:moveDuration position:ccp(sprite.position.x, -sprite.contentSize.height/2)], nil]];
id attackAction = [CCSequence actions:goDown, repeatDown, nil];
[sprite runAction:attackAction];
} …
Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法在cocos2d 2.0中推送一个场景并将一些参数传递给这个推送的场景,例如,我知道要推动一个场景我使用这个:
[[CCDirector sharedDirector] pushScene:[HelloWorldLayer scene]];
Run Code Online (Sandbox Code Playgroud)
这推动了helloworldlayer,这是一个简单的层:
// HelloWorldLayer
@interface HelloWorldLayer : CCLayer
{
}
// returns a CCScene that contains the HelloWorldLayer as the only child
+(CCScene *) scene;
@end
Run Code Online (Sandbox Code Playgroud)
但我想传递给这一层一些参数,所以当推出图层时我可以使用我传递的参数.
我怎么能这样做?
对不起,如果这听起来很琐碎.我只是没有得到它.如何确定特定精灵是否已经存在于图层中?基本上,我需要在确定是否将其添加到图层之前检查这一点.
你好真棒的开发社区.我已经寻找了几天的答案,似乎无法找到一个句柄,所以决定自己发布Q.
我有一个游戏,有选择项目的菜单.菜单可以有2 - > 30+项,因此需要滚动.还有类别菜单,单击某个项目时,将显示包含该类别项目的新菜单.
我认为最有效的方法是在专用层上创建菜单所需的所有元素.问题是我不知道如何在包含菜单的CCLayer中调用主游戏场景中定义的addNewItems:itemsArray函数.
或者,我应该只使用一层?有点乱,难以将多个项目放在一起.
非常感谢你的任何帮助 - 或指着我明确的教程或如何做到这一点的例子,因为我真的找不到任何帮助.
下面是我要创建的内容的流程图.
谢谢!!
Hanaan
这是关于CCNode :: init()和CCNode :: onEnter()之间差异的主题.但是我遵循他们给出的建议.
void MyLayer::onEnter() {
CCLayer::onEnter();
//your code goes here
}
Run Code Online (Sandbox Code Playgroud)
我收到了Assertion failed!
错误!
MyLayer代码:
class MyLayer : public CCLayerColor
Run Code Online (Sandbox Code Playgroud)
我应该添加CCLayerColor::onEnter()
我的MyLayer::onEnter()
代码吗?和之间有什么区别CCLayer::init()
和CCLayer::onEnter()
.我init()
应该将哪部分代码放入哪部分应该放入哪部分onEnter()
?
我正在使用Cocos2d来拖动精灵,并尝试在选择精灵时添加边框.我可以让我的白色背景显示,但我的边界证明特别困难.我有这个代码:
if(self.selectedSprite)
self.selectedSprite = nil;
CCLayerColor *selectedLayer = [[CCLayerColor alloc] init];
// CCSprite *backgroundSprite = [CCSprite spriteWithFile:@"white_1x1.gif" rect:CGRectMake(2,2,self.boundingBox.size.width-4,self.boundingBox.size.height-4)];
CCSprite *backgroundSprite = [CCSprite spriteWithFile:@"white_1x1.gif" rect:CGRectMake(0,0,self.boundingBox.size.width,self.boundingBox.size.height)];
[backgroundSprite setContentSize:CGSizeMake(self.contentSize.width-4, self.contentSize.height-4)];
backgroundSprite.anchorPoint = ccp(0,0);
CCRenderTexture* rt = [CCRenderTexture renderTextureWithWidth:backgroundSprite.texture.contentSize.width + 2 height:backgroundSprite.texture.contentSize.height+2];
[backgroundSprite setFlipY:YES];
[backgroundSprite setColor:ccc3(0,0,0)];
ccBlendFunc originalBlendFunc = [backgroundSprite blendFunc];
[backgroundSprite setBlendFunc:(ccBlendFunc) { GL_SRC_ALPHA, GL_ONE }];
CGPoint bottomLeft = ccp(backgroundSprite.texture.contentSize.width * backgroundSprite.anchorPoint.x + 1, backgroundSprite.texture.contentSize.height * backgroundSprite.anchorPoint.y + 1);
CGPoint position = ccpSub([backgroundSprite position], ccp(-backgroundSprite.contentSize.width / 2.0f, -backgroundSprite.contentSize.height / 2.0f));
[rt begin];
for …
Run Code Online (Sandbox Code Playgroud) cclayer ×11
cocos2d-iphone ×10
iphone ×3
cocos2d-x ×2
ios ×2
uiview ×2
c++ ×1
ccsprite ×1
deprecated ×1
function ×1
game-physics ×1
math ×1
opengl-es ×1
xcode ×1