2015-10-08 4 views
0

Хорошо, я разрабатываю игру, в которой игрок должен перетащить объект и поместить его в банку. Я обнаружил, что гораздо проще назначить ограничение координат x, чтобы определить, когда объект, который они перетаскивают, должен имитировать падение в банку. Код, который я до сих пор работает отлично. Тем не менее, скрипт действия, который инициируется, когда объект пересекает границу координаты 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

Благодаря Botmaster, основываясь на вашем направлении я изменил свой код следующим образом:

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, то перетаскивание будет ограничено прямоугольником1
  2. После того, как объект был перетащен в конкретную позицию x за пределами банки, он будет перемещаться внутри банки.
  3. Теперь, когда объект находится в банке, его новая позиция x будет меньше 400, а перетаскивание теперь будет ограничено прямоугольником2.
  4. Теперь, когда объект перетаскивают нашу банку и поверх объекта hitTestObject, он будет перемещаться назад в случайное положение на стороне банки.
0

У вас нет кода, который ограничивает перемещение перетаскиваемого объекта. Если вы хотите ограничить позицию объекта, просто передайте объект Rectangle методу startDrag.

+0

Спасибо BotMaster, в соответствии с вашим руководством, я нашел способ создать два разных прямоугольника на сцене и определить, какой из них ограничивает позицию объекта на основе позиции объекта – Warren

Смежные вопросы