2Dアクション。ブロックに当たった時。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぐれーと

2Dアクション。ブロックに当たった時。

#1

投稿記事 by ぐれーと » 15年前

こんにちわ。今、マリオ系の2Dアクションゲームを適当に作ってるんですけど、


ゲームプログラミングの館の
「27. ジャンプの考え方1(物理)」を参考にしてキャラを動かしたり、
「24. 行けない所を作る。~2D~」を参考にしてブロックを描画することができたのですが、

ブロックに乗れたり、下からぶつかった時の判定(ぶつかっておちる)
をどうやってやればいいのかわかりませんorz

何かいい方法を教えてくださいm(-_-)m

みけCAT

Re:2Dアクション。ブロックに当たった時。

#2

投稿記事 by みけCAT » 15年前

>ブロックに乗れたり
足元にブロックがあるかを判定して、あったら落下速度を0にする。
それでもブロックがある間プレイヤーを1ドットずつ上に上げる。
>下からぶつかった時の判定(ぶつかっておちる)
頭上にブロックがあるかを判定して、あったら落下(上昇)速度を0にする。
それでもブロックがある間プレイヤーを1ドットずつ下に下げる。
int getTikei(int x,int y) {
    /*指定された座標にブロックがあるかを調べる*/
    /*あったら真、なかったら偽を返す。*/
    return 0;
}

    /*ループ内*/

    /*cx:キャラの左上x座標
      cy:キャラの左上y座標
      sx:キャラの横の大きさ
      sy:キャラの縦の大きさ
      vy:落下速度(下向きが正)*/

    /*上にブロックがあるか*/
    if(getTikei(cx,cy) || getTikei(cx+sx,cy)) {
        vy=0;
        while(getTikei(cx,cy) || getTikei(cx+sx,cy))cy++;
    }
    /*下にブロックがあるか*/
    if(getTikei(cx,cy+sy) || getTikei(cx+sx,cy+sy)) {
        vy=0;
        while(getTikei(cx,cy+sy) || getTikei(cx+sx,cy+sy))cy--;
    }
実行していないので、間違っていたらすみません。 画像

ぐれーと

Re:2Dアクション。ブロックに当たった時。

#3

投稿記事 by ぐれーと » 15年前

ん~。「27. ジャンプの考え方1(物理)」を参考にして、
ジャンプの動き方は↓のようにしたんですが・・・。

//ジャンプの動き

if(xh.flag==1){
xh.time2 = GetNowCount() ; // 現在経過時間を得る
xh.t = (double)(xh.time2 - xh.time) / 1000.000; // エンターが押されてからの経過時間を計算
y = (int)( (sqrt ( 2.000 * g * y_max) * xh.t - 0.500 * g * xh.t * xh.t ) *200.000 /y_max );//y座標を計算
if(y>=0){
if(xh.flag2==0){
xh.y=384-y;
xh.gazo=gazou[xh.muki];
}
if(xh.flag2==1){
xh.y=384-y;
xh.gazo=gazou[xh.muki2];
}
}
else{
xh.flag=0;
}
}

ていう感じなんですけど、どうやって落下速度を取り入れるんでしょうか?

閉鎖

“C言語何でも質問掲示板” へ戻る