0

本当に助けが必要です。最終学年のプロジェクトでゲームアプリを作っています。壁や斜めのブロックの跳ね返りで的を狙ってボールを打ち込むシンプルなゲームです。ただし、次の 2 つの分野で助けが必要です。

  1. 射撃メカニズムは愚かなゾンビのメカニズムに似ています。画面をタッチして、ボールを発射する方向を示す十字線があります。リリースすると、ボールはその方向に移動し、うまくいけばターゲットに入ります。そうでない場合は、重力と摩擦によってボールが停止します。

    問題は、このようなコードをどのようにコーディングするかです。

  2. ボールが壁を跳ね返る必要があり、ターゲットに到達するためにボールが特定の部分に当たらなければならないように、角度を付けたブロックをいくつか用意します。目標に到達しない場合、ボールは最終的に停止します。

    壁とブロックの衝突を作成する方法を作成するにはどうすればよいですか?

ここ数週間、ゲームの作成に役立つチュートリアルを探してきましたが、私が作成しているゲームの種類に特化したものはあまり見つかりませんでした。これは私の最初の Android アプリであり、最終年度のプロジェクトであり、残り時間があまりないため、サンプル コードまたはテンプレートを提供できれば素晴らしいと思います。

よろしくお願いします

4

1 に答える 1

1

あなたの質問は、スタック オーバーフローには一般的すぎて、誰もあなたのプロジェクトをやってくれません。基本的なプログラミングの経験があると仮定すると、本を入手して最初にそれを学ぶ必要はありません。

タグのために既に Android を選択したと仮定し、2D ゲームの方が簡単であると仮定します。

事前リクエスト: まだインストールしていない場合は、java+eclipse+android sdk をインストールしてください。新しいプロジェクトを作成し、月着陸船の例を使用します。携帯電話またはエミュレーターで実行できることを確認してください。

開始サンプル: 月着陸船にはゲーム ループと別のスレッドがあり、常に画面全体を再描画します。これは、常に doDraw 関数を呼び出すことによって行われます。次に、キャンバスを使用して線、円、ボックス、色、およびビットマップを描画して、ゲームに似せます。(canvas.draw....) Lunar Landar は openGL を使用しないため、速度は遅くなりますが、はるかに簡単に使用できます。

サンプルの剥ぎ取り: おそらくキーイベントや月面宇宙船は必要ありません! onDraw 関数内のすべてを削除する onKeyUp、onKeyDown を削除する 発生したエラーをすべて削除する 新規作成する

@Override
public boolean onTouchEvent(MotionEvent event){
    return false;
}

実行すると、空白の画面が表示されます。これがゲームの作成を開始するためのキャンバスです... ボールについて言及しましたが、ボールが何であるかに分解します: 位置と方向、ボール x、y の変数を作成し、タッチ イベントはボールの方向を変更し、ドロー イベントはボールを動かし (x,y 方向をボール x,y に追加)、ボールを描画します (canvas.drawCircle(x,y,radius,new) Paint())) は、より多くのボールを検索して配列について読みたいと考えています。最も重要なことは、簡単に始めて実験することです。

2回の衝突

衝突は dodraw 関数で行うことができ、次のように分類されます: オブジェクトを移動し、そのオブジェクトが移動するはずの場所を通過したかどうかを確認し、通過した場合は誰かが気付く前に元に戻します.... 衝突検出にはさまざまな手法があります。 :

  • 壁がすべて水平および垂直 (最も簡単) である場合、ボックスの衝突はボールの新しい x,y+-radius を壁 x,y,width および height に対してチェックします。これは 1 つの大きな if ステートメントであり、Google には数十億の例があります。

  • 壁が傾いている場合は、線の衝突検出が必要です。基本的には、ボールが向かっている場所の線 (ベクトル) と壁のベクトルがあり、2 つの線が衝突する場所を確認し、その点が両方とも壁にあるかどうかを確認する関数を作成します。そしてあなたのボールの半径内(グーグルライン交差点機能)

  • または、カラーピッキングを使用できます。たとえば、すべての壁が赤であることを知ってシーンを描画し、新しいボール x、y がある点が赤であるかどうかを確認し、ヒットしたことを認識します。

頑張ってください。これが少し役に立てば幸いです。シンプルにして試行錯誤を続けてください。うまくいけば、これで始められ、次の質問がより具体的になる可能性があります。

于 2012-04-08T22:09:51.330 に答える