2015-10-08 30 views
0

好吧,我正在開發一款遊戲,需要玩家拖動一個物體並將其放置在罐子裏面。我發現指定x座標限制以便確定它們拖動的對象何時應該模擬放入jar中更容易。我迄今爲止的代碼完美地工作。但是,當玩家移動對象過快超過x限制時,會忽略對象跨越x座標限制時啓動的動作腳本。我認爲我可以通過限制對象被拖動的速度來解決這個問題。有沒有人有任何方向可以實現這一目標?如何調整對象的拖動速度?

這裏是我的代碼:

jarFront.mouseEnabled = false; jarFront.mouseChildren = false; 

// animate buttons in 
import fl.transitions.Tween; 
import fl.transitions.easing.*; 
import fl.transitions.TweenEvent; 
import flash.events.Event; 

var objArray:Array = new Array; 

objArray.push(obj1); 
objArray.push(obj2); 
objArray.push(obj3); 

var objPosition:Point; 

function dragobj(e:Event):void { 
e.currentTarget.startDrag(); 
objPosition = new Point(e.currentTarget.x, e.currentTarget.y); 
}   
function dragobjStop(e:Event):void { 
    e.currentTarget.stopDrag(); 
    e.currentTarget.x = e.currentTarget.x; 
    e.currentTarget.y = objPosition.y; 
    objPosition = null; 
} 


for (var i:uint = 0; i < objArray.length; i++) { 
    objArray[i].addEventListener(MouseEvent.MOUSE_DOWN, dragobj); 
    objArray[i].addEventListener(MouseEvent.MOUSE_UP, dragobjStop); 
} 

// Drop in jar 



var HighH:int=400; 
var HighW:int=400; 
var LowH:int=-200; var LowW:int=0; 
var HighyH:int=170; 
var HighyW:int=170; 
var LowyH:int=0; var LowyW:int=0; 

this.addEventListener(Event.ENTER_FRAME, goJar) 
function goJar(e:Event):void 
{ 
    if (obj1.x > 400 && obj1.x < 440) { 
     obj1.stopDrag(); 
      //set back or tween position 
      obj1.x = 83; 
      obj1.y = -300; 
      this.setChildIndex(obj1,1) 
      var ct1_1:Tween = new Tween(obj1, "y", None.easeNone, obj1.y, obj1.y=Math.floor(Math.random()*(1+HighyH-LowyH))+LowyH, .2, true); 
      var ct1_2:Tween = new Tween(obj1, "rotation", Bounce.easeOut, 0, 180, 1, true); 
      var ct1_3:Tween = new Tween(obj1, "x", None.easeNone, obj1.x, obj1.x=Math.floor(Math.random()*(1+HighH-LowH))+LowH, .2, true); 

    } else { 


// keep inside jar 

     if (obj1.x > -330 && obj1.x < -260) { 
     obj1.stopDrag(); 
      //set back or tween position 
      obj1.x = 83; 
      obj1.y = -300; 
      this.setChildIndex(obj1,1) 
      var ct1_4:Tween = new Tween(obj1, "y", None.easeNone, obj1.y, obj1.y=Math.floor(Math.random()*(1+HighyH-LowyH))+LowyH, .2, true); 
      var ct1_5:Tween = new Tween(obj1, "rotation", Bounce.easeOut, 0, 180, 1, true); 
      var ct1_6:Tween = new Tween(obj1, "x", None.easeNone, obj1.x, obj1.x=Math.floor(Math.random()*(1+HighH-LowH))+LowH, .2, true); 

    } 
} 

} 

而且,這將是非常有益的,如果有一種方法,包括上述的陣列功能,下面的「//下降罐子」的一切,讓這個動作腳本自動應用於obj2和obj3。

回答

0

感謝殭屍主控機,根據你的方向我修改我的代碼如下所示:

var rectangle1:Rectangle = new Rectangle(400, -665, 1156, 1052); 
var rectangle2:Rectangle = new Rectangle(-376, -665, 721, 1052); 
var candyPosition:Point; 


function dragCandy(e:Event):void { 
    if (e.currentTarget.x > 400) { 
     e.currentTarget.startDrag(false, rectangle1); 
     candyPosition = new Point(e.currentTarget.x, e.currentTarget.y); 
     } else { 
      e.currentTarget.startDrag(false, rectangle2); 
      candyPosition = new Point(e.currentTarget.x, e.currentTarget.y); 
      } 
     } 

基本上,這裏所發生:

  1. 如果對象是在大於400的x位置,然後拖動將被限制爲矩形1
  2. 一旦對象被拖動到jar外的特定x位置,它將在jar內部被補間。
  3. 既然對象在jar中,它的新x位置將小於400,現在拖動將被限制爲rectangle2。
  4. 現在,當對象被拖動到我們的jar和hitTestObject的頂部時,它將被恢復到jar外部的任意位置。
0

你在那裏沒有任何限制被拖動物體運動的代碼。如果要限制對象位置,只需將Rectangle對象傳遞給startDrag方法即可。

+0

感謝BotMaster,根據您的指示,我找到了一種方法在舞臺上創建兩個不同的矩形,並根據對象的x位置確定哪一個限制對象位置 – Warren