【问题标题】:Drag and Drop Game using AS3使用 AS3 拖放游戏
【发布时间】:2012-06-06 14:12:37
【问题描述】:
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;

var wordArray:Array = [mc_clipA, mc_clipB];
var imgArray:Array = [Aimg, Bimg];
var posArray:Array = [ {x:816.15, y:396.05}, {x:518.3, y:410.05}];

var ClipA:MovieClip;
var ClipB:MovieClip;

var startXpositionClipA:Number;
var startYpositionClipA:Number;
var startXpositionClipB:Number;
var startYpositionClipB:Number;

wordArray[0].buttonMode = true;
wordArray[1].buttonMode = true;

wordArray[0].addEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDownClipA);
wordArray[1].addEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDownClipB);

//Mouse Down Function for ClipA
function item_onMouseDownClipA(event:MouseEvent):void {
    ClipA = MovieClip(event.currentTarget);
    startXpositionClipA = ClipA.x;
    startYpositionClipA = ClipA.y;
    addChild(ClipA); 
    ClipA.startDrag();
    stage.addEventListener(MouseEvent.MOUSE_UP, stage_onMouseUpClipA);
    wordArray[0].removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDownClipA);
    wordArray[1].removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDownClipB);
}

//Mouse Up Function for ClipA
function stage_onMouseUpClipA(event:MouseEvent):void {
    stage.removeEventListener(MouseEvent.MOUSE_UP, stage_onMouseUpClipA);
    ClipA.stopDrag();
    var indexClipA:int = wordArray.indexOf(ClipClipA);
    var matchClipClipA:MovieClip = MovieClip(imageArray[indexClipA]);
    if(matchClipClipA.hitTestPoint(ClipA.x, ClipA.y, true)) {
        ClipA.x = positionArray[indexClipA].x;
        ClipA.y = positionArray[indexClipA].y;
        ClipA.removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDownZip);
        ClipA.buttonMode = false;
        var tot=0; 
        tot=tot+10;
        score.text="You scored: " + tot +" Points ";
        var setTimer:Timer = new Timer(1000,60);
        setTimer.addEventListener(TimerEvent.TIMER,doTask);
        setTimer.start();
        function doTask(event:TimerEvent) {
        gotoAndStop(1,"Scene 2");
        setTimer.stop();
        }
    } 
    else
    {    
        ClipA.x = startXpositionClipA;
            ClipA.y = startYpositionClipA;
        wordArray[0].addEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDownClipA);
        wordArray[1].addEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDownClipB);

    }
}

//Mouse Down Function for ClipB
function item_onMouseDownClipB(event:MouseEvent):void {
    ClipB = MovieClip(event.currentTarget);
    startXpositionClipB = ClipB.x;
    startYpositionClipB = ClipB.y;
    addChild(ClipB); 
    ClipB.startDrag();
    stage.addEventListener(MouseEvent.MOUSE_UP, stage_onMouseUpClipB);
    wordArray[0].removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDownClipA);
    wordArray[1].removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDownClipB);

}

//Mouse Up Function for ClipB
function stage_onMouseUpClipB(event:MouseEvent):void {
    stage.removeEventListener(MouseEvent.MOUSE_UP, stage_onMouseUpClipB);
    ClipB.stopDrag();
    var indexClipB:int = wordArray.indexOf(ClipB);
    var matchClipClipB:MovieClip = MovieClip(imageArray[indexClipB]);
    if(matchClipClipB.hitTestPoint(ClipB.x, ClipB.y, true)) {
        ClipB.x = positionArray3[indexTie].x;
        ClipB.y = positionArray3[indexTie].y;
        ClipB.removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDownClipB);
        ClipB.buttonMode = false;
        var tot=0; 
        tot=tot;
        score.text="You scored: " + tot +" Points ";
        var setTimer:Timer = new Timer(1000,60);
        setTimer.addEventListener(TimerEvent.TIMER,doTask);
        setTimer.start();
        function doTask(event:TimerEvent) {
        gotoAndStop(1,"Scene 2");
        setTimer.stop();
        }
    } 
    else
    {    
        ClipB.x = startXpositionClipB;
            ClipB.y = startYpositionClipB;
        wordArray[0].addEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDownClipA);
        wordArray[1].addEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDownClipB);
    }
}

这是关于拖放游戏。将向用户显示特定对象名称,然后用户必须将正确的图像拖放到指定位置,一旦任务完成,它将动态导航到下一个场景。为此,我使用了计时器类。我在场景 2 中遇到此错误,但在场景 1 中代码运行完美。

命名约定都是正确的,但我仍然收到以下错误,

TypeError:错误 #1009:无法访问空对象引用的属性或方法。 在 MethodInfo-1156() 在 flash.utils::Timer/_timerDispatch() 在 flash.utils::Timer/tick()

谁能帮帮我。

【问题讨论】:

  • 你知道定时器设置为重复 60 次吗?

标签: actionscript-3


【解决方案1】:

您的本地声明方法“doTask”在鼠标侦听器执行后立即被删除。您应该创建一个匿名内联侦听器

    var setTimer:Timer = new Timer(1000,60);
    setTimer.addEventListener(TimerEvent.TIMER, function(event:TimerEvent):void {
      gotoAndStop(1,"Scene 2");
      setTimer.stop();
    });
    setTimer.start();

有些人喜欢这样做,但我不喜欢内联声明。我会在我的班级中创建一个真正的方法作为侦听器。

private var setTimer:Timer;

function stage_onMouseUpClipB(event:MouseEvent):void {
  ...
  setTimer = new Timer(1000,60);
  setTimer.addEventListener(TimerEvent.TIMER,doTask);
  ...
}

function doTask(event:TimerEvent):void {
  gotoAndStop(1,"Scene 2");
  setTimer.stop();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    相关资源
    最近更新 更多