【问题标题】:if statement that groups all the statements into one if statementif 语句将所有语句组合成一个 if 语句
【发布时间】:2011-01-24 21:12:53
【问题描述】:

你如何制作一个 if 语句,将所有语句组合成一个 if 语句,目前我有 20 个或者一些不是很有效的 if 语句,所以我想知道是否有办法对精灵进行分组这样,如果我的任何精灵离开屏幕顶部,它们就会重新出现在底部,反之亦然。

目前我有这个; yellow1,2,3... 是精灵

if (yellow1.position.y-33>=320) {
  yellow1.position = ccp(yellow1.position.x,33);
}
if (yellow1.position.y+33<=0) {
  yellow1.position = ccp(yellow1.position.x,287);
}
if (yellow2.position.y-33>=320) {
  yellow2.position = ccp(yellow2.position.x,33);
}
if (yellow2.position.y+33<=0) {
  yellow2.position = ccp(yellow2.position.x,287);
}
if (yellow3.position.y-33>=320) {
  yellow3.position = ccp(yellow3.position.x,33);
}
if (yellow3.position.y+33<=0) {
  yellow3.position = ccp(yellow3.position.x,287);
}
if (yellow4.position.y-33>=320) {
  yellow4.position = ccp(yellow4.position.x,33);
}
if (yellow4.position.y+33<=0) {
  yellow4.position = ccp(yellow4.position.x,287);
}
if (yellow5.position.y-33>=320) {
  yellow5.position = ccp(yellow5.position.x,33);
}
if (yellow5.position.y+33<=0) {
  yellow5.position = ccp(yellow5.position.x,287);
}
if (yellow6.position.y-33>=320) {
  yellow6.position = ccp(yellow6.position.x,33);
}
if (yellow6.position.y+33<=0) {
  yellow6.position = ccp(yellow6.position.x,287);
}
if (yellow7.position.y-33>=320) {
  yellow7.position = ccp(yellow7.position.x,33);
}
if (yellow7.position.y+33<=0) {
  yellow7.position = ccp(yellow7.position.x,287);
}
if (yellow8.position.y-33>=320) {
  yellow8.position = ccp(yellow8.position.x,33);
}
if (yellow8.position.y+33<=0) {
  yellow8.position = ccp(yellow8.position.x,287);
}

到目前为止,这是我的循环:

for (int i=0;i<16 ; i++) {
    if (((CCSprite *)[c1array objectAtIndex:i]).position.y-((CCSprite *)[c1array objectAtIndex:i]).contentSize.height>320) {
        ((CCSprite *)[c1array objectAtIndex:i]).position = ccp(((CCSprite *)[c1array objectAtIndex:i]).position.x,37);
    }
    if (((CCSprite *)[c1array objectAtIndex:i]).position.y+((CCSprite *)[c1array objectAtIndex:i]).contentSize.height<0) {
        ((CCSprite *)[c1array objectAtIndex:i]).position = ccp(((CCSprite *)[c1array objectAtIndex:i]).position.x,253);
    }
}

【问题讨论】:

    标签: iphone if-statement cocos2d-iphone grouping sprite


    【解决方案1】:

    你想要的是一个循环。但首先,您需要将数据结构化为顺序数据结构,例如数组。然后你将遍历数组中的每个元素。

    我不熟悉 iPhone 编程,但这里是一般的伪代码:

    // Create the list
    const int SPRITE_COUNT = 8;
    Sprite[] sprites = new Sprite[SPRITE_COUNT];
    for(int i = 0; i < SPRITE_COUNT; ++i)
        sprites[i] = new Sprite();
    
    // Later, check for sprites outside
    for(int i = 0; i < SPRITE_COUNT; ++i)
    {
        if ((sprites[i].position.y + 33) <= 0)
            ccp(sprite.position.x, 287);
        if ((sprites[i].position.y - 33) >= 320)
            ccp(sprite.position.x, 33);
    }
    

    【讨论】:

    • 感谢代码不知道为什么我没有考虑通过数组循环它:)
    【解决方案2】:

    你可以把你的精灵放在一个数组列表中,然后循环遍历这个列表。这意味着您正在运行相同数量的代码,但让运行时做它擅长的事情,并且您的代码会更加整洁。

    【讨论】:

    • 嘿伙计,你能帮我用 iphone 编码上面 jdmichal 发布的示例的方式吗?我已将后面的循环放入 cctouchmoved 我只是不确定将“创建列表”放在哪里'。它是放在头文件还是带有超级 if 的主文件中。谢谢
    • 我收到精灵和精灵的错误,代码如何知道要计算哪些精灵,创建一个列表位我在哪里写精灵名称
    • 您遇到了什么错误?您实际上不能将 Sprite 用作数据类型。正如 jdmichal 所说,这只是伪代码。如果您使用的是最新版本的 cocos2d,您想要的可能是 CCSprite。您还需要查看应该比 NSArray 更有效地工作的 CCArray 类。你知道如何分配一个 NSArray 或 CCArray 吗?我并不是说仅仅根据你的措辞粗鲁,你可能不会。
    • @Rob Segal - 不用担心,我知道你分配了一个这样的数组 NSArray *sprite = [[NSArray alloc] init];我只是对他在 sprite 和 new? 之后在括号中给出的代码感到困惑,在创建列表位中。您能帮我创建列表并检查外部精灵的代码吗?我认为这很好。谢谢
    • @Rob Segal,你能帮帮我吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 2018-10-01
    • 2016-03-02
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多