0

私は少しの間フラッシュをいじっていました。通常は問題をかなり迅速に解決しますが、この問題で数日間立ち往生しています。グーグルは役に立ちませんでした。フラッシュについてよく知っている友人もいません。 .

それで、私は基本的な 2D プラットフォームの作成に取り組んできました。キャラクターと bg.hitTestPoint にポイントを実装する方法を理解するのに問題があります。現状では、ポイントとすべてを作業する前は、正常に機能していました. オブジェクト (この場合は壁) との衝突と見なされたときに通知するために、トレースが入っています。


キャラクターの寸法:
上部中央: (42,0)
ボット中央: (42,112)
R. 中央: (84,56)
L. 中央: (0,56)
合計画像: 84 x 112 (px)

画面上のキャラクターの位置:
上部中央: (46, 460)
ボット中央: (46, 379)左中央
: (20, 440)
右中央: (80,420)

ブロックは次のとおりです。

バンプ/衝突変数:

var leftB:Boolean = false;
var rightB:Boolean = false;
var topB:Boolean = false;
var botB:Boolean = false;

var topBPt:Point = new Point(42, 0);
var botBPt:Point = new Point(42, 112);
var leftBPt:Point = new Point(0, 56);
var rightBPt:Point = new Point(84, 56);

hitTestPoint ブロック: (スペースを節約するために、一番上のブロックだけを実行します。)

if(bg.hitTestPoint(fag.x + topBPt.x, fag.y + topBPt.y, true))
{
    trace("Top Bump works.");
    topB = true;
}
    else
{
    topB = false;
} 



if(topB)
{
    if(ySpeed < 0)
    {
        ySpeed *= -0.5;
    }
}



異なる次元を使用しようとしましたが、読んでいたサイトの完全な説明を理解していなかった可能性がわずかにあります.

また、hitTestObject を作成し、壁の各部分を手動で異なるものにすることで回避できると感じています...しかし、それが効率的または合理的であるとは思いません。
助けてくれてありがとう。

4

1 に答える 1

0

長方形の領域の衝突を見つけるための計算は、一般的に同じです。

まず、コードを一瞥した後、画面オブジェクトをオブジェクトとして定義します...つまり、サブクラスのスプライトクラスを意味し、それにプロパティを追加します.グローバル経由でそれをしないでください...

お気に入り:

public class myScreenObjs extends Sprite {
      // Add the tricky cool specialities and properties here
} 

通常、スプライトはその x 座標と y 座標を公開します。動的に作成された x と y がスプライトの左上にある場合、cs6 を使用する場合は、共通の基準を得るために中心から左上に交差する o を使用することをお勧めします。中央の xy 参照は、特に回転が必要な 3D に適しています。

スプライトには幅と高さのプロパティもあります。

スプライト c (キャラクター) と b (ブロックからバンプ) があるとします。

与えられた:

left はオブジェクトの左 x です。

right はオブジェクトの右 x です。

top は、オブジェクトのトップ y です。

bottom はオブジェクトの下 y です。

これはあまり最適な関数ではないことはわかっていますが、デモ用に書いています。

function bumpTest(c: Sprite, b: Sprite):Object {
var
  r: * = {},
  cLeft   : int = c.x,    // doing this for demonstrating you can directly use c.x
  cRight  : int = c.x + c.width,
  cTop    : int = c.y,   // same
  cBottom : int = c.y + c.height,
  bLeft   : int = b.x,    // same
  bRight  : int = b.x + b.width,
  bTop    : int = b.y,   // same
  bBottom : int = b.y + b.height;

  r.left   = Boolean ((cLeft  >= bLeft) && (cLeft <= bRight));
  r.right  = Boolean ((cRight >= bLeft) && (cRight <= bRight));
  r.top    = Boolean ((cTop     >= bTop) && (cTop <= bBottom));
  r.bottom = Boolean ((cBottom  >= bTop) && (cBottom <= bBottom));
  r.bump   = Boolean ((r.left || r.right)&&(r.top || r.bottom));
  return(r);
}

r.bump が false の場合、r の他の値は無関係です。r.bump が true になった場合、c が b にぶつかる場所から r.left などを介して確認できます。以来:

r.left true は、c left が b の境界内または境界にあることを意味します。

r.right true は、c right が b の境界内または境界にあることを意味します。

r.top true は、c top が b の境界内または境界にあることを意味します。

r.bottom true は、c の底が b の境界内または境界にあることを意味します。

于 2013-03-19T08:34:03.183 に答える