gpt4 book ai didi

iphone - 我怎样才能在 cocos2d 中垂直而不是水平移动这些背景图像?

转载 作者:行者123 更新时间:2023-11-28 20:38:35 26 4
gpt4 key购买 nike

我有这个 void 函数可以水平移动两个背景图像,但我想垂直移动:

-(void) scroll:(ccTime)dt 
{
//move 30*dt px vertically
if (background.position.x<background2.position.x){
background.position = ccp(background.position.x - 30*dt,background.contentSize.height/2);
background2.position = ccp(background.position.x+background.contentSize.width,background2.contentSize.height/2);
}else{
background2.position = ccp(background2.position.x- 30*dt,background2.contentSize.height/2);
background.position = ccp(background2.position.x+background2.contentSize.width ,background.contentSize.height/2);

}

//reset offscreen position
if (background.position.x <-background.contentSize.width/2)
{
background.position = ccp(background2.position.x+background2.contentSize.width,background.contentSize.width/2);
}else if (background2.position.x < -background2.contentSize.width/2)
{
background2.position = ccp(background.position.x+background.contentSize.width, background2.contentSize.width/2);
}
}

更新我的代码:

因为我不想改变 x 坐标,所以我想改变 y,这样图像就可以垂直移动了!

-(void) scroll:(ccTime)dt 
{
//move 30*dt px vertically
if (background.position.y<background2.position.y){
background.position = ccp(background.position.y - 30*dt,background.contentSize.width/2);
background2.position = ccp(background.position.x+background.contentSize.height,background2.contentSize.width/2);
}else{
background2.position = ccp(background2.position.y- 30*dt,background2.contentSize.width/2);
background.position = ccp(background2.position.y+background2.contentSize.height ,background.contentSize.width/2);

}

//reset offscreen position
if (background.position.y <-background.contentSize.width/2)
{
background.position = ccp(background2.position.y+background2.contentSize.height,background.contentSize.height/2);
}else if (background2.position.x < -background2.contentSize.height/2)
{
background2.position = ccp(background.position.y+background.contentSize.height, background2.contentSize.height/2);
}
}

但是随着那个改变我只得到第一个背景,并且没有滚动 :((

后台初始化代码:

        //adding background sprites
background = [CCSprite spriteWithFile:@"bg.JPG"];
background2 = [CCSprite spriteWithFile:@"bg.JPG"];
[background.texture setAliasTexParameters];
[background2.texture setAliasTexParameters];

//position background sprites
background.position = ccp(background.contentSize.width/2,background.contentSize.height/2);
background2.position = ccp(0,size.height);

//schedule to move background sprites
[self schedule:@selector(scroll:)];

//adding them to the main layer
[self addChild:background z:0];
[self addChild:background2 z:0];

我是 cocos2d 的新手,我不太明白它是如何工作的,谢谢!!

最佳答案

现在您有了工作代码的记录(您的问题在这里),所以跳入代码并使其垂直。

cocos2d 中的position 表示背景的中心。

position.x 是水平分量,position.y 是垂直分量。

使用 ccp 设置新位置可以被认为是

background.position = ccp(newX,newY);

如果我们为您进行修改,我们将剥夺您良好的学习体验。试一试并在您接近但仍然卡住时更新您的问题。

更新...所以

让我们看一下您更改的其中一行代码

    background.position = ccp(background.position.y - 30*dt,background.contentSize.width/2);

这不会做你想做的,因为你只切换了 x <-> y 和 width <-> height如果您不能使用短代码来编写更长的代码,请不要害怕编写更长的代码(您必须先学习才能编写短代码)

对于我们关注的一行,让我们将其分解为工作。

float bgOldX = background.position.x;
float bgOldY = background.position.y;
float bgNewY = bgOldY - 30*dt;
// no need for newX because we are moving horizontally
background.position = ccp(bgOldX,bgNewY);

无论您从哪里获得原始代码,都是由熟悉此类内容的人编写的。替换 1 的 4 行代码不是很漂亮,但它会帮助您理解该过程。

更新

这是使代码更改的顶层 block 生效的一个例子。我相信你应该看到两个背景在移动。这是基于您的第一个 void 函数正在运行的假设。如果您无法使重置位置部分正常工作,我很乐意进一步提供帮助。

-(void) scroll:(ccTime)dt 
{
// i am not too fond of my variable names
//move 30*dt px vertically
float bgOldX = background.position.x;
float bgOldY = background.position.y;
float bg2OldX = background2.position.x;
float bg2OldY = background2.position.y;
float bgNewY,bg2NewY;
// no need for newX because we are moving horizontally
if (background.position.y<background2.position.y){
bgNewY = bgOldY-30dt;
bg2NewY = bgNewY+background.contentSize.height;
background.position = ccp(bgOldX,bgNewY);
background2.position = ccp(bg2OldX, bg2NewY);
}else{
bg2NewY = bg2OldY-30dt;
bgNewY = bg2NewY+background2.contentSize.height;
background.position = ccp(bgOldX,bgNewY);
background2.position = ccp(bg2OldX, bg2NewY);
}

//reset offscreen position
//reset offscreen position
// etc....
}

关于iphone - 我怎样才能在 cocos2d 中垂直而不是水平移动这些背景图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9526752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com