سؤال

أحاول إنشاء لعبة منهاج وأنا أحاول أن أوقف "Player1" عندما يضرب "منصة". هنا هو رمز بلادي حتى الآن،

    gotoAndStop("gameStart");

import flash.display.MovieClip;
import flash.events.*;
import flash.ui.Keyboard;
import flash.ui.*;


import flash.utils.Timer;
import flash.events.TimerEvent;

player1.gotoAndStop("nothing");


 //private var speed:Number = 0;
 //private var maxspeed:Number = 4;

var myTimer:Timer = new Timer(10,0);


stage.focus = this;


player1.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
/*
myTimer.addEventListener(TimerEvent.TIMER,someFunction);



myTimer.start();

function someFunction(event:TimerEvent) {
 player1.y += 2;


}
*/

function setup() {
 stage.addEventListener(KeyboardEvent.KEY_DOWN, reactToArrowKeys);
}
setup();


function reactToArrowKeys(keyEvent:KeyboardEvent) {

 if (keyEvent.keyCode == 37) {

  if (player1.x > 0) {
   player1.x -= 5;
  }

 } else if (keyEvent.keyCode == 39) {

  if (player1.x < 700) {
   player1.x += 5;
  }

 }


}


function enterFrameHandler(e:Event):void {
   if (player1.hitTestObject(platform)) {
    trace("hitting");
   } else {
    player1.y += 4;
   }
  }

ومع ذلك، لا تعمل وظيفة HittestObject (Enterframehandler) بشكل صحيح وسوف تأخذ دائما الطريق "آخر".

الرجاء المساعدة!

هل كانت مفيدة؟

المحلول

الرمز كما نشر يعمل بشكل جيد بالنسبة لي. كنت أنظر إلى نوع آخر من الخطأ السخيف - على سبيل المثال، إذا قمت بنسخ ومقاطع الأفلام التي تم لصقها، فقد يكون لديك أكثر من مقطع واحد على المرحلة المسماة "منصة"، وفي هذه الحالة قد لا يتم حل المرجع الخاص بك على واحد أنت اعتزم. أو شيء آخر على طول تلك الخطوط.

لتتبع ذلك، حاول الاتصال:

trace( player1.getBounds(stage) );
trace( platform.getBounds(stage) );

مما سيخبرك حيث يعتقد الفلاش أن الصناديق المحيطة بتلك المقاطع هي. تخميني هو أن الكود سيعود شيئا آخر غير ما الذي تتوقعه، وحل هذا التناقض سيظهر أين الخطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top