Cocos2D CCSprite对象移动太多了

时间:2012-12-06 17:29:45

标签: iphone objective-c ios cocos2d-iphone

我已经将CCSprite子类化为一个Zombie对象。它只是加载一个僵尸图像并让用户移动它:

@implementation Zombie

@synthesize speed; // CGFloat


- (id) initWithPosition: (CGPoint) position
{
    if(self= [super initWithFile: @"zombie_icon.png"])
    {
        CCTouchDispatcher* dispatcher=[CCTouchDispatcher sharedDispatcher];
        self.position=position;
        self.scale= 0.25;
        speed= 50.0;
        [dispatcher addTargetedDelegate: self priority: 0 swallowsTouches: YES];
    }
    return self;
}

#pragma - mark Movements

- (NSTimeInterval) timeFromDestination: (CGPoint) destination
{
    CGFloat distance= sqrt( pow (fabs(self.position.x-destination.x),2) + pow (fabs(self.position.y-destination.y),2));
    return distance/speed;
}

- (BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    return YES;
}

- (void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint location=[self convertTouchToNodeSpace: touch];
    NSTimeInterval duration= [self timeFromDestination: location];
    [self runAction: [CCMoveTo actionWithDuration: duration position: location]];
}



@end

所以在我的图层中我这样做:

Zombie* zombie=[[Zombie alloc]initWithPosition: CGPointMake(200, 250)];
[self addChild: zombie];
[zombie release];

僵尸有时会正确移动,有时也不会 例如,僵尸在(100,100),我点击(200,200),它向那个方向移动,但是当它到达(200,200)时它继续前进直到它离开屏幕。
如果你说问题的描述不那么清楚,我可以上传视频。

1 个答案:

答案 0 :(得分:1)

你的目的地错了(记录帮助)。你的僵尸的当前位置在父节点的空间坐标中,你可以将它移动到僵尸节点空间表示法中的目的地。