快速連結

2011年11月23日

筆記:無視物理的拋物線

來源:CCSprite利用Bezier(贝塞尔)做抛物线动作并让CCSprite同时播放两个Action动作!
如果要看物理的話:Cocos2D & Box2D

基本上一般的拋物線不使用『重力加速度』,且知道目的地位置可以套用此方式。

我使用的是以下的寫法:



先宣告一個角度+速度值,負值為下:

float Speed;


在touch或是任個按鈕事件中內寫上:

Speed = ccpAngle(物件位置, 現在拉的位置);
id CallFormula = [CCCallFuncO actionWithTarget:self selector:@selector(FightRootFormula:) object:MyWeapon];
id Delays = [CCDelayTime actionWithDuration:0.05];
id ExcSequence = [CCSequence actions:[CCRepeat actionWithAction:[CCSequence actionOne:CallFormula two:Delays] times:50];
[MyWeapon runAction:ExcSequence,[CCHide action], nil]];


然後在同個程式檔案內寫上此function:

-(void)FightRootFormula:(CCSprite*)mSprite{
#define V 20
#define G 1
    Speed += G;
    mSprite.position = ccp(mSprite.position.x + V,mSprite.position.y-Speed);  //往右丟。
    [mSprite setRotation:Speed*某個值];

    BOOL HIT_ENEMY = NO;
    if (CGRectContainsPoint([敵人 boundingBox], mSprite.position)){//(CGRectContainsRect([mSprite boundingBox], [敵人 boundingBox])){
        NSLog(@"打到敵人");
        HIT_ENEMY = YES;
    }
    if (mSprite.position.y < LEND || mSprite.position.y > 320 || mSprite.position.x > 480 || HIT_ENEMY){
        [mSprite stopAllActions];
    }
}

沒有留言:

張貼留言

歡迎大家留言提問,我會答的都會盡力回答!
如果太久沒出現回應就是我又忘記回來看留言了TAT