3

私は Allegro 5 で最初のゲームに取り組んでいます。タイトル メニューのレンダリングはそのままですが、メニューにクリック可能なテキストを追加したいと考えています。テキストの上にカーソルを置いたときにクリックできるようにするにはどうすればよいですか? ピクセルをチェックする for ステートメントを使用すると、パフォーマンスが非常に低下すると考えています。これまでのところ、次のようなものがあります。

#include <allegro5\allegro.h>
#include <allegro5\allegro_image.h>
#include <allegro5\allegro_primitives.h>

const int width = 1280;
const int height = 720;

int main(void)
{
    al_init();

    al_init_primitives_addon();
    al_init_image_addon();

    ALLEGRO_DISPLAY *display = al_create_display(width, height);
    ALLEGRO_BITMAP *title = al_load_bitmap("titlemenu.bmp");

    al_clear_to_color(al_map_rgb(0, 0, 0));
    al_draw_bitmap(title, 0, 0, 0);
    al_flip_display();
    al_rest(3.0);
    al_destroy_display(display);
    return 0;
}

Windows XP SP3 でコードブロックを使用しています

4

2 に答える 2

7

「適切に」行うには、ある種の GUI ライブラリを使用する必要があります。ただし、一部の長方形の座標をハードコーディングすることで、画面のクリック可能なセクションを簡単に作成できます。

まず、イベント処理をセットアップする必要があります。

ALLEGRO_EVENT_QUEUE *queue;
queue = al_create_event_queue();
al_install_keyboard();
al_register_event_source(queue, al_get_keyboard_event_source());

イベント処理の詳細には触れずに (それ自体がトピック全体です)、関連するビットを次に示します。

int selection = 0;

while (!selection)
{
  ALLEGRO_EVENT event;
  al_wait_for_event(queue, &event);
  if (event.type == ALLEGRO_EVENT_KEY_UP)
  {
    if (event.keyboard.keycode == ALLEGRO_KEY_ESCAPE)
      selection = MYGAME_QUIT;
  }
  else if (event.type == ALLEGRO_EVENT_MOUSE_BUTTON_UP)
  {
    if (event.mouse.x >= MYGAME_MENU_X1 && event.mouse.x < MYGAME_MENU_X2 &&
        event.mouse.y >= MYGAME_MENU_Y1 && event.mouse.y < MYGAME_MENU_Y2)
    {
      selection = MYGAME_OPTION1;          
    }
  }
}

この例を改善する方法はたくさんあります。これは、開始するためのものです。

イベント処理に関するドキュメントを注意深く読み、バンドルされている例を調べ、wikiで詳細を確認してください。

PS: クロス プラットフォームであるため、ファイル パスを使用する場合はスラッシュを使用してください。

#include <allegro5/allegro.h>
于 2012-09-03T06:28:05.757 に答える
0

上記は正しくありません。ゲームにキーボードを追加すると、衝突検出、ピクセル パーフェクト、バウンディング ボックスの 2 つのオプションが利用できます。両方とも allegro 5 wiki で説明されています。最適なメニュー IMO を作成するためのここでのチェックは、メニューのループとタイマーを作成してから、キーボード、マウス、およびタイマーのイベントを別々にリストすることです。次に、マウスまたはキーボードのイベントが実際にクリックしたときにのみトリガーされるように if ステートメントをいくつか作成します。これは、マウスとキーパッドの両方でメニューをスクロールできるようにするために必要です。クリックしますが、少なくとも IMO では前の方が見栄えがします。

于 2015-02-16T08:27:52.240 に答える