掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.30152

2D格闘ゲームについて
投稿者---ガラくた屋(2007/05/18 11:48:15)


格ゲーを作ってるんですが、
条件 前・後ろジャンプ中に相手にぶつかった。
結果 相手がプレイヤーキャラの方向とは逆の方向にX軸移動する
というのをやりたいのですがどうすればいいでしょうか?
例 相手が画面端にいて、前ジャンプすると相手が後ろに下がって
プレイヤーキャラが画面端に移動する。
という感じです。
よろしく御願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:2D格闘ゲームについて 30153 ガラくた屋 2007/05/18 13:03:29


No.30153

Re:2D格闘ゲームについて
投稿者---ガラくた屋(2007/05/18 13:03:29)


環境を書き忘れていたので書きます。
windows2000OSでVC++6.0 directx環境で作成してます。



この投稿にコメントする

削除パスワード

No.30154

Re:2D格闘ゲームについて
投稿者---acid(2007/05/18 14:00:22)


そんなの、領域が重なったら、相手のX座標をプレイヤーの移動方向に一定値移動させればいいんじゃね。
え、そうじゃない?


この投稿にコメントする

削除パスワード

No.30155

Re:2D格闘ゲームについて
投稿者---ガラくた屋(2007/05/18 16:59:40)


意見アリガトウございます。
その状態だと
画面端で相手が動かないままになるので相手の上に乗っかっちゃいます。
Y軸を使って当たったら、逆に移動をすればいいと思うのですが、
なぜかうまくいきませんでした。




この投稿にコメントする

削除パスワード

No.30156

Re:2D格闘ゲームについて
投稿者---ガラくた屋(2007/05/18 20:41:16)


atackartは判定ようの関数です。
Play_fors();
Enemy_fors();は判定前に判定用の短形を作ってます。
int anime::Play_Plus(int x, int y)
{

    int trues = 0;
   x = x * Play_Vector;
    Play_fors();
    Enemy_fors();
/*` if(AtackArt(atack_plays[0], atack_map, x, 0))
    {
        for(int g_x =  x; ; g_x -= Play_Vector)
                                    {
            if(!AtackArt(atack_plays[0], atack_map, g_x, 0))
                                        {
                                        x =  g_x ;
                                        
                                            break;
                                        }
                                    }
    }*/
                    
            
    

    
    
            if(AtackArt(atack_plays[0], atack_enemy[0], x, y))
            {
                *c_play_x += x;
                *c_play_y += y;
                Play_fors();
                if(     *c_play_y  < atack_map.c_y + atack_map.y2)
                {
                    j_flg = 1;

                }
            
            
            }else if(!AtackArt(atack_enemy[0], atack_map, 0, 0))
                    {
                        int enemy_x = 0;
                        int play_x = 0;
                    
                            for(int g_y=  y ; ; g_y -= Enemy_Vector)
                                    {
                                        if(AtackArt(atack_enemy[0], atack_plays[0], g_y, 0))
                                        {
                                            enemy_x += g_y;
                                        //  *c_enemy_x +=  g_y ;
                                    
                                            break;
                                        }
                                    }
                                    for(int g_x =  x; ; g_x  -= Play_Vector)
                                    {
                                        if(AtackArt(atack_plays[0], atack_enemy[0], g_x, 0))
                                        {
                                            play_x += g_x;
                                        //  *c_play_x +=  g_x ;
                                        
                                            break;
                                        }
                                    }
                                    *c_enemy_x += enemy_x;
                                    *c_play_x += play_x;

                                    *c_play_x += x;
                                    *c_play_y +=  y;
                                    Play_fors();
                            
                                    *c_enemy_x += x;
                            //    *c_enemy_y += y;
                                    Enemy_fors();
                                    if(     *c_play_y  < atack_map.c_y + atack_map.y2)
                                    {
                                        j_flg = 1;

                                    }
                        
                                
                    }
                
                  
            
        
        

        
    
    
        
    
    x = 0;
    y = 0;
    if(c_plays[next[0]].flg == 0)
    {
        if(!AtackArt(atack_plays[1], atack_enemy[0], x, y))
        {
            if(c_plays[next[0]].top[1] == 0 && c_plays[next[0]].down[1] == 0)
            {
                if(c_plays[next[0]].left[1] == 0 && c_plays[next[0]].rait[1] == 0)
                {
                    return trues;
                }

            }
        if(c_enemys[next[1]].flg == 1 && !AtackArt(atack_plays[1], atack_enemy[1], x, y))
        {

            return trues;      
        }

    //  printf("sakura");
        Enemy_Read(7);
            c_e_flg = 1;
    
            *c_enemy_life -=    c_plays[next[0]].damage;
    
        }else if(c_enemys[next[1]].flg == 1 && !AtackArt(atack_plays[1], atack_enemy[1], x, y))
        {

            return trues;      
        }

    }


    return trues;
}



この投稿にコメントする

削除パスワード

No.30157

Re:2D格闘ゲームについて
投稿者---ぽへぇ(2007/05/18 22:23:29)


どの変数が判定用の短形なのか、さっぱりわからん。
読んでもらおうと思うのなら、それなりのドキュメントが必要だよ。

>格ゲーを作ってるんですが、
>条件 前・後ろジャンプ中に相手にぶつかった。
>結果 相手がプレイヤーキャラの方向とは逆の方向にX軸移動する
>というのをやりたい

そのまま素直に書くと

if(プレーヤーが前・後ろジャンプ中 && 相手にぶつかった) {
    // x軸プラス方向を右とする
    相手の移動方向 = (プレーヤーの方向 == +) ? - : +;
    相手のx軸 += 相手の移動方向 * 移動量
}

となるけど、だめ?



この投稿にコメントする

削除パスワード

No.30158

Re:2D格闘ゲームについて
投稿者---ガラくた屋(2007/05/19 00:04:20)


言われてみればそうでね。
考えすぎて冷静になれてなかったようです。
意見ありがとうございます。
やってみます。 
関数についてはすみません。
今後気をつけます。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧