1

私はここに来たばかりで、少し助けが必要です。基本的に私はパックマンのようなゲームをデザインしていますが、それは Wind in the Willows に基づいている必要があるので、Mole-man です!!

とにかく、私はそれの基本をやった.2Dモグラを作り、彼を動かし、ボタンの押下などに反応させた.そして今、外壁から始めて、壁を機能させようとしている.

エッジの周りに 4 つの長方形を作成し、それらを 1 つの形状にマージして、「outerWalls」と呼びました。私は hitTestObject を使用して動作させようとしましたが、成功しませんでした。

私は、molman.xIncrement = -5 で動作させるためのテストを行いました。これにより、彼は壁に触れることなくすぐに後方に移動します。これは、彼が壁の内側にいて、4つの外壁を全体的に正方形として分類し、彼がすでに理論上の正方形の内側にいるため、彼を外に移動させるためかどうかについて興味がありますか? よくわかりません。いくつかのコードを持っています!!

アクション レイヤー - フレーム 1:

import flash.events.KeyboardEvent;

var moleman = this.addChild(new Moleman_mc());

moleman.x = 100;
moleman.y = 200;
moleman.width = 24;
moleman.height = 24;

moleman.xIncrement = 5;
moleman.yIncrement = 0;

stage.addEventListener(KeyboardEvent.KEY_DOWN, doKeyDown);

function doKeyDown (e:KeyboardEvent):void
{
    switch(e.keyCode)
    {
        case Keyboard.UP:
        moleman.xIncrement = 0;
        moleman.yIncrement = -5;
        moleman.rotation = -90;
        break;

        case Keyboard.DOWN:
        moleman.xIncrement = 0;
        moleman.yIncrement = 5;
        moleman.rotation = 90;
        break; 

        case Keyboard.LEFT:
        moleman.xIncrement = -5;
        moleman.yIncrement = 0;
        moleman.rotation = 180;
        break;

        case Keyboard.RIGHT:
        moleman.xIncrement = 5;
        moleman.yIncrement = 0;
        moleman.rotation = 0;
        break;
    }
}

アクション レイヤー - フレーム 2:

import flash.events.Event;

var collectCounter:int = 0;

moleman.x += moleman.xIncrement;
moleman.y += moleman.yIncrement;

if(moleman.hitTestObject(collect))
{
    collectCounter ++;
    collect.visible = false;
}

moleman.addEventListener(Event.ENTER_FRAME, wallHit);

function wallHit(event:Event):void
{
    if(moleman.hitTestObject(outerWalls))
    {
        moleman.stop();
    }
}

アクション レイヤー - フレーム 3:

gotoAndPlay(2);

さらに、収集 (収集品など) を機能させることができません。計画では、「収集」アイテムを 1 つ収集するたびに、そのアイテムが消え、collectCounter に 1 つ追加しますが、他のすべては表示されたままになります。現在、「コレクト」アイテムを 1 つ集めると、モールマンは停止してその場にとどまり、別のモールマンが現れて続行するため、あまり役に立ちません。これに関するヘルプもいただければ幸いです。どこから取得すればよいかわかりません。

どんな助けでも大歓迎です、私はこれが初めてですが、うまくいくことを願っています:)

すべての助けに感謝します。ジョン。

4

1 に答える 1

0

あなたの場合、衝突を検出するには、hitTestObject の代わりに hitTestPoint メソッドを使用する必要があります。hitTestPoint メソッドには署名があります。

public function hitTestPoint(x:Number, y:Number, shapeFlag:Boolean = false):Boolean

そのため、shapeFlag が true に設定されている場合、ポイント (ヒーロー) と迷路形状 (またはその他の任意の形状) との衝突を検出できます。バウンディング ボックスではなく、実際の形状との交差が計算されるため、この方法は非常に強力です。変更された wallHit メソッドは次のようになります。

moleman.addEventListener(Event.ENTER_FRAME, wallHit);
function wallHit(event:Event):void
{

    if(outerWalls.hitTestPoint(moleman.x, moleman.y, true))
    {
      // collision
      moleman.x += -moleman.xIncrement;
      moleman.y += -moleman.yIncrement;
      moleman.xIncrement=0;
      moleman.yIncrement=0;
    }

    moleman.x += moleman.xIncrement;
    moleman.y += moleman.yIncrement;

if(moleman.hitTestObject(collect))
{
    collectCounter ++;
    collect.visible = false;
}

}

フレーム 3 と「gotoAndPlay(2);」を削除することもできます。ヒーローの位置を制御するコードを ENTER_FRAME ハンドラに入れる方がよいため、呼び出します。

于 2012-12-06T00:34:22.240 に答える