2011-06-22 22 views
6

Tôi có một hình vuông màu đỏ mà tôi muốn kéo chỉ trên trục x. Tôi đã làm việc ra một kịch bản đơn giản, về mặt lý thuyết nên hoạt động, nhưng nó không hoạt động đúng cách. Đó là một chút khó khăn để giải thích .. hình vuông tiếp tục bắt đầu ở vị trí sai và vị trí sân khấu dường như thay đổi vì vậy đôi khi bạn không thể kéo hình vuông tất cả các cách bên phải ...AS3 Làm thế nào để khởi động chỉ trên trục x?

red.buttonMode = true; 
red.addEventListener(MouseEvent.MOUSE_DOWN, dragHandler); 

function dragHandler(e:MouseEvent):void { 
    var ypos:Number = e.currentTarget.y; 
    var xpos:Number = e.currentTarget.x; 

    e.currentTarget.startDrag(false,new Rectangle(-xpos,ypos,stage.stageWidth,0)); 
} 


red.addEventListener(MouseEvent.MOUSE_UP, dropHandler); 

function dropHandler(e:MouseEvent) { 
    //trace("red up"); 
    e.currentTarget.stopDrag(); 
} 

Trả lời

3

Bạn có thể thử một cách tiếp cận khác nhau kết hợp với MouseEvent.MOUSE_MOVE, vì việc sử dụng hình chữ nhật cho ranh giới động sẽ phức tạp.

// define lock on y-axis 
var LOCKY:Number = target.y; 

// MouseEvent.MOUSE_MOVE 
stage.addEventListener(MouseEvent.MOUSE_MOVE, _mouseMove); 
function _mouseMove(e:MouseEvent):void 
{ 
    if(target.y != LOCKY) target.y = LOCKY; 
} 

// dragging 
target.addEventListener(MouseEvent.MOUSE_DOWN, _mouseDown); 
function _mouseDown(e:MouseEvent):void 
{ 
    target.startDrag(); 
    target.addEventListener(MouseEvent.MOUSE_UP, _mouseUp); 
} 

// dropping 
function _mouseUp(e:MouseEvent):void 
{ 
    target.stopDrag(); 
    target.removeEventListener(MouseEvent.MOUSE_UP, _mouseUp); 
} 
+0

Ahh cảm ơn! Đó là một giải pháp linh hoạt hơn nhiều. – muudless

+0

Điều này thật tuyệt! Làm thế nào tôi có thể sửa đổi dòng này để làm cho nó đi trên một con đường góc cạnh? nếu mục tiêu (target.y! = LOCKY).y = LOCKY; – Marsman

+0

Giải pháp tuyệt vời +1 –

14

Giải pháp của Glad Marty cho bạn, mặc dù nó không quá hiệu quả (trình xử lý MouseEvent.MOUSE_MOVE là kẻ giết người). Vấn đề với mã ban đầu của bạn là hình chữ nhật mà bạn giới hạn ranh giới kéo phải liên quan đến tọa độ của bố mẹ . Ngoài ra, tùy thuộc vào nơi bạn có điểm đăng ký của hình vuông, bạn có thể phải xem tài khoản chiều rộng của mình nếu bạn không muốn bất kỳ phần nào của nó di chuyển ra khỏi sân khấu.

Ví dụ, nếu hình vuông màu đỏ của bạn là trực tiếp trên sân khấu, điểm đăng ký của nó nằm trên trung tâm của nó, và bạn muốn giới hạn kéo cho toàn bộ trục x của sân khấu, điều này sẽ làm việc:

e.currentTarget.startDrag(
     false, 
     new Rectangle(
      e.currentTarget.width/2, 
      e.currentTarget.y, 
      stage.stageWidth-e.currentTarget.width, 
      0 
     ) 
); 
+1

giải pháp ở đây là tốt hơn và probarly cũng là giải pháp chính thức, tôi đã thử giải pháp đầu tiên khác vì đó là giải pháp hàng đầu, tuy nhiên khóa với sự kiện chậm nhưng cũng verry lỗi, đôi khi bạn vẫn có thể di chuyển đối tượng một chút. – matthy

0

NÀY SẼ LÀM VIỆC ActionScript 3 (Semilla Sol Apps)

1- tạo thường xuyên chuột xuốngMOUSE UP nghe sự kiện

2- thả của bạn 'startDrag' và 'stopDrag' yếu tố trong mỗi chức năng đó tương ứng

Đây là cách để khóa chặt các AXIS:

1: tạo một người biết lắng nghe kiện đối với đối tượng bạn muốn hạn chế ... trong ví dụ này, đó là trường hợp movieclip có tên 'player':

player.addEventListener(Event.ENTER_FRAME, pLimiter); 

ĐÂY LÀ 'pLimter' CHỨC NĂNG:

function pLimiter(e:Event):void 
{ 
    player.y = stage.stageHeight; 
} 

Vì vậy, trong trường hợp này chúng ta đang hạn chế 'kéo' chỉ để trục x.

  • bên trên dude! (Semilla Sol Apps)
Các vấn đề liên quan