2017-07-20 5 views
-1

私はAS3でプラットフォーマーを作成中です。しかし、苦労しているのはスロープ検出を管理する方法です。私は大いに私を混乱させ、idは一般的に好きではないことを好むので、idは実際にファンシーパンツの冒険のようなゲームのような何かのようなidが本当にBox2DまたはCDKのような外部のものを使用しないことを好む。すべての私の試みは、私はいくつかの斜面で動作するようにすることができますが、他のものに合うように変更すると(例えば、キャラクターが1つの斜面を管理しますが、 (例えば、プレイヤーが第2の傾斜を管理しますが、アップバウンスやダウン狂っ第二に... ので、任意の助けをいただければ幸いです... ありがとう。 コードは以下のとおりである。AS3プラットフォームスロープ検出

//var setup 
var leftPressed: Boolean = false; 
var rightPressed: Boolean = false; 
var upPressed: Boolean = false; 
var downPressed: Boolean = false; 
var leftBumping: Boolean = false; 
var rightBumping: Boolean = false; 
var upBumping: Boolean = false; 
var downBumping: Boolean = false; 
var lowerleftBumping: Boolean = false; 
var lowerrightBumping: Boolean = false; 
var leftBumpPoint: Point = new Point(-30, -87); 
var rightBumpPoint: Point = new Point(30, -87); 
var lowerleftBumpPoint: Point = new Point(-32, -2); 
var lowerrightBumpPoint: Point = new Point(32, -2); 
var upBumpPoint: Point = new Point(0, -174); 
var downBumpPoint: Point = new Point(0, 0); 
var scrollX: Number = -4; 
var scrollY: Number = -68; 
var ySpeed: Number = 0; 
var xSpeed: Number = 0; 
var speedConstant: int = 5; 
var maxSpeedConstant: Number = 30; 
var frictionConstant: Number = 0.9; 
var gravityConstant: Number = 2; 
var jumpConstant: Number = -45; 
//game 
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler); 
stage.addEventListener(Event.ENTER_FRAME, loop); 
function keyDownHandler(e: KeyboardEvent): void { 
    if (e.keyCode == Keyboard.LEFT) { 
     leftPressed = true; 

    } else if (e.keyCode == Keyboard.RIGHT) { 
     rightPressed = true; 

    } else if (e.keyCode == Keyboard.UP) { 
     upPressed = true; 

    } else if (e.keyCode == Keyboard.DOWN) { 
     downPressed = true; 
    } 
} 

function keyUpHandler(e: KeyboardEvent): void { 
    if (e.keyCode == Keyboard.LEFT) { 
     leftPressed = false; 

    } else if (e.keyCode == Keyboard.RIGHT) { 
     rightPressed = false; 

    } else if (e.keyCode == Keyboard.UP) { 
     upPressed = false; 

    } else if (e.keyCode == Keyboard.DOWN) { 
     downPressed = false; 
    } 
} 

function loop(e: Event): void { 
    if (back.hitTestPoint(player.x + leftBumpPoint.x, player.y + leftBumpPoint.y, true)) { 
     trace("leftBumping"); 
     leftBumping = true; 
    } else { 
     leftBumping = false; 
    } 

    if (back.hitTestPoint(player.x + rightBumpPoint.x, player.y + rightBumpPoint.y, true)) { 
     trace("rightBumping"); 
     rightBumping = true; 
    } else { 
     rightBumping = false; 
    } 

    if (back.hitTestPoint(player.x + upBumpPoint.x, player.y + upBumpPoint.y, true)) { 
     trace("upBumping"); 
     upBumping = true; 
    } else { 
     upBumping = false; 
    } 

    if (back.hitTestPoint(player.x + downBumpPoint.x, player.y + downBumpPoint.y, true)) { 
     trace("downBumping"); 
     downBumping = true; 
    } else { 
     downBumping = false; 
    } 
      if (back.hitTestPoint(player.x + lowerleftBumpPoint.x, player.y + lowerleftBumpPoint.y, true)) { 
      trace("lowerrightBumping"); 
      lowerleftBumping = true; 
     } else { 
      lowerleftBumping = false; 
     } 
     if (back.hitTestPoint(player.x + lowerrightBumpPoint.x, player.y + lowerrightBumpPoint.y, true)) { 
      trace("lowerrightBumping"); 
      lowerrightBumping = true; 
     } else { 
      lowerrightBumping = false; 
     } 
    if (leftPressed) { 
     xSpeed -= speedConstant; 

    } else if (rightPressed) { 
     xSpeed += speedConstant; 

    } 
    if (leftBumping) { 
     if (xSpeed < 0) { 
      xSpeed *= -0.5; 
     } 
    } 

    if (rightBumping) { 
     if (xSpeed > 0) { 
      xSpeed *= -0.5; 
     } 
    } 

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

    if (downBumping) { 
     if (ySpeed > 0) { 
      ySpeed = 0; //set the y speed to zero 
     } 
     if (upPressed) { 
      ySpeed = jumpConstant; 
     } 
    } else { 
     ySpeed += gravityConstant; 
    } 
    if (xSpeed > maxSpeedConstant) { //moving right 
     xSpeed = maxSpeedConstant; 
    } else if (xSpeed < (maxSpeedConstant * -1)) { //moving left 
     xSpeed = (maxSpeedConstant * -1); 
    } 
    xSpeed *= frictionConstant; 
    ySpeed *= frictionConstant; 
    if (Math.abs(xSpeed) < 0.5) { 
     xSpeed = 0; 
    } 

    scrollX -= xSpeed; 
    scrollY -= ySpeed; 

    back.x = scrollX; 
    back.y = scrollY; 
    if (scrollY < -770) { 
     scrollX = -4; 
     scrollY = -68; 
     ySpeed=0 
     xSpeed=0 
    } 
} 
+0

これは意味をなさない。正確な問題を表現し、問題の原因となるコードを表示する必要があります。 – HITMAN

+0

オンラインチュートリアル(はい、たくさんあります)では、初心者向けのチュートリアルでも、ステップバイステップのチュートリアルでも、プラットフォームゲームを作成する方法があります。あなたが混乱している衝突と逆運動学の部分を混乱させるBox2Dは、物事をより簡単にし、包み込むことができれば、それを使用しないことで、より簡単で簡単な解決策を得ることが本当に期待できますか? – Organis

答えて

1

Iの場合私の人生(Box2D)の愛を使わないように強制された場合、私はhitTestObjectで遊んで、私のスロープの角度に何らかの数学をして、彼らが開始する速度を生み出すと思います。私はここのコミュニティがより多くのものだと思うアーキテクチャのブレーンストーミングではなく、特定の問題。

+0

こんにちは、私はあなたがここで何を言っているかを完全に理解しています。私の質問は少し幅があり、ここでうまくいきません。私はBox2Dを使いたいと思っていますが、あなたのゲームがクラス内に含まれていないときにどのように使用するかを説明するようなインターネット上のものは何も見つかりません。私はこの問題によって閉鎖されたプロジェクトを続けているので、これはやや刺激的です。しかし、もしあなたがこのことを通して私を説明したり歩いてくれたら、私はとても感謝しています。ありがとう –

+0

フレームコードが効率的ではありません。そのような方法を使って大規模なアプリケーションを構築すると、通常のクラスのプロジェクトよりも多くの時間を費やすことになるので、私は真剣にあなたの設計を打ち切ることをお勧めします。それは本当にそれほど難しくありませんし、Flash/AIRでさらに多くのことを学ぶことを学ぶ...私はそれを置くことができる最高の方法は、あなたが1つのフレームを持っていて、どのようなフレームコードを持っているようなビルド。しかし、それは恐ろしい練習だと真剣に*別の方法を検討する必要があります。 – quantomworks

+0

さて、私はそれをどうやってやるのか分かりません。なぜなら、これは私の知識の100%です...以前はクラスを使いましたが、それは難しく、数十の問題に遭遇しました。たくさんのものを輸入する...私はやってみる。私がそれを働かせたら、あなたからのBox2Dに関するアドバイスに頼ることができますか? –

関連する問題