0

我想使用 for 循环在以下几点安排我的精灵:

ccp(240.0, 160.0);
ccp(300.0, 120.0);
ccp(300.0, 200.0);
ccp(360.0, 80.0);
ccp(360.0, 160.0);
ccp(360.0, 240.0); 

我正在尝试使用 for 循环为这些点获取迭代公式。我已经有一段时间了。下面是点的视觉表示。请帮忙。

        *

    *

*       *

    *

        *
4

2 回答 2

0

这是一种方法:

我没有花几分钟的时间去想它,但是如果你从最大的一行开始往下走,它会更容易:

模式测试.h

#import "cocos2d.h"
@interface PatternTest : CCLayer
@end

模式测试.m

@implementation PatternTest
-(id) init
{
    if( (self=[super init]))
    {
        CCNode *grid = [self generateArrowPatternWithBaseRowOfNumSprites:5 spacedApart:ccp(25.0f, 25.0f)];
        [grid setPosition:ccp(50.0f,50.0f)];
        [self addChild:grid];

    }

    return self;
}

-(CCNode *) generateArrowPatternWithBaseRowOfNumSprites:(float) numSprites spacedApart:(CGPoint) space
{
    CCNode* patternNode = [CCNode node];
    CGPoint tempPos = ccp(0.0f, 0.0f);
    float offset = 0.0f;
    while (numSprites > 0)
    {
        for(int x=numSprites;x>0;x--)
        {
            CCSprite *patternSprite = [CCSprite spriteWithFile:@"Icon.png"];
            [patternSprite setScale: 0.3f];
            [patternSprite setPosition: tempPos];
            [patternNode addChild:patternSprite];
            tempPos = ccpAdd(tempPos, ccp(0.0f,space.y));
        }

        tempPos = ccp(tempPos.x, 0.0f);
        offset = offset + (space.y / 2.0f);
        tempPos = ccpAdd(tempPos, ccp(space.x, offset));
        numSprites -= 1;
    }
    return patternNode;
}
@end
于 2013-04-25T18:16:15.007 回答
0

你想要这样的东西吗?(它只是一个快速的草图)

假设初始参数:

initPoint (x0, y0)

initVector (vX,vY)

num of iteration c

index = c

while index

 for(j = index, currentPoint = initPoint+(c-index)*(0,2*vY); j;j--, currentPoint += initVector)
    draw currentPoint

index--

基本上,主要思想是,您从右上角开始,并随着迭代保持(到左下角)并绘制点,多次使用初始向量移动绘图的上下文。然后将初始点沿 y 轴向下移动并重复负一次。

于 2013-04-25T16:32:24.167 回答