0

こんにちは、学校の演習でゲームを作成する必要があり、パックマンを作成することにしました。すべてうまくいっていますが、私が達成できないことの 1 つは、パックマンの男と彼の幽霊を描くことです. パックマンの口も動きに合わせて開閉したいです。誰かがこれを描くのを助けることができますか?

私が今まで持っているものの下:

package h04PacMan;

import java.awt.*;

public class DrawPacMan {

public void drawPacMan(Graphics g, int x, int y, Color color) {

    g.setColor(color); // set color
    g.fillOval(x, y, 50, 50); // paint
    g.setColor(Color.black);
    g.drawOval(x, y, 50, 50); // outline
    // mouth?

}

public void drawGhost(Graphics g, int x, int y, Color color) {

    g.setColor(color); // color
    // here goes shape

}

}
4

3 に答える 3

2

drawOvalandを使用する代わりに、 andfillOvalを確認する必要がありdrawArcますfillArc

java.awt.Graphicsを参照してください。

口のアニメーションについて: パックマンが絶えず動いていることを考えると、パックマンの位置をサイン関数と組み合わせて、次のような滑らかな口の動きを得ることができます。

angle = 20 * (Math.sin((x + y)*2*Math.PI/50) + 1); # alt. betw. 0 and 40
g.fillArc(x, y, 50, 50, angle/2, 360-angle);

このように、パックマンの口は、迷路の中を自分のサイズの距離を移動するときに、自動的に開閉サイクルを 1 回行います。(設定に合わせて数値を微調整する必要がある場合があります。)

もちろん、ゲーム全体を実行するにはスレッドが必要ですが、パックマンの口のアニメーションもこの方法で行うことができ、余分なスレッドは必要ありません。

于 2012-10-08T18:53:51.907 に答える
1

したがって、ここで対処する必要があることがいくつかあります。

1.キャラクターを描く

ここでは、パックマンの描画についてのみ説明します。

パックマン ゲームについて考えると、パックマンのキャラクターには 2 つの状態があります。口を閉じた状態と開いた状態です (それぞれの基本方向に!)。これは、すぐにパックマンをアニメーション化するときに重要になるため、まず、グラフィックス ライブラリfillArcのメソッドを使用してパックマンの形状を確立します。

口を開けたパックマンの例:

  g.setColor(Color.yellow);
  g.fillArc(0,0,150,150,30,300);

これにより、ウィンドウの左上隅にパックマンが作成され、パックマンの口が画面の右側を向きます。fillArc メソッドの最後の 2 つのパラメーターは、この開口部を制御します。5 番目のパラメーターは開始角度で、6 番目のパラメーターは円弧全体の角度です。このことから、開始角度 0 は、円弧の中心から画面の右側に向かう水平線であると推測できます。また、数学から完全な円は 360 度であることを思い出してください。

この情報を使用して、口を開けたパックマンを上下左右に描いてみてください。その後、弧全体を塗りつぶして、口を閉じたパックマンを描きます。また、ゴーストの描画に使用できるグラフィックス ライブラリの他の方法も検討してください。

2. パックマンのアニメーション

このタスクでは、Pacman をアニメーション化するためにある種の Thread 構造を実装する必要があるでしょう。これは、ここで示したものよりもかなり複雑になります。私たちはあなたのプログラムの仕様を知らず、アニメーションに関連するコードをまだ示していないので、これ以上説明するのをためらっています. ただし、この問題に関するいくつかのリンクを紹介します。

于 2012-10-08T21:10:27.323 に答える
0

Area/ Path2DAPIを利用することをお勧めします。

グラフィックス2Dを見てください

例については、この回答のサンプル コードをご覧ください。

于 2012-10-08T19:10:23.947 に答える