2011-11-22 3 views
3

나는 아이들의 팔찌 게임을 디자인하려고하는데, 구슬을 드래그하여 문자열 (원)에 떨어 뜨릴 수 있습니다. 그러나 타원 (원)에 객체를 끼우는 데 문제가 있습니다. 현재 공 (구슬) 타원 주위를 돌면서 붙어 있지만 화면의 아래쪽에서 드래그하여 배수를 여러 번 잡아 당기면 타원형을 찍을 수있게됩니다. 기본적으로 어린이가 비드를 선택하여 드래그 할 수 있습니다. 문자열, 자신 만의 팔찌를 만들려면플래시 드래그 앤 드롭 쥬얼리 게임 만들기?

이 모든 것을 도와 드릴까요? 아래의 코드는 제가 지금까지 가지고있는 것입니다. 올바른 방향으로 어떤 도움이나 조치를 취해 주셔서 감사합니다! :)

import flash.display.Sprite; 
import flash.events.Event; 
import flash.events.MouseEvent; 
var rX:Number = 150; 
var rY:Number = 150; 
var numItems:Number = 12; 
var zeroSector:Object = sector(0, rX, rY); 

function sector(degree:Number, radiusX:Number, radiusY:Number):Object { 
    // coordinates of a point on ellipse 
    var xpos:Number = radiusX * Math.cos(degree * Math.PI/180); 
    var ypos:Number = radiusY * Math.sin(degree * Math.PI/180); 

    // find the angle that has the Y-coords of the mouse position, solve for angle somehow... 
    return {x:xpos, y:ypos}; 
} 


function objPosition():void { // detecting coordinates of a clip 
     var ratio:Number = rX/rY; 

     var anAngle = Math.atan2(mouseX - myEllipse.x, mouseY - myEllipse.y); 
      var deg:Number = 90-(Math.atan2(Math.sin(anAngle), Math.cos(anAngle) * ratio)) * (180/Math.PI); 

     var _sector:Object = sector(deg, rX, rY); 
     trace(_sector.x) 
     bntMc.x = _sector.x; 
     bntMc.y = _sector.y; 

} 

// draw ellipse 
var myEllipse:Sprite = new Sprite(); 
myEllipse.x = 275; 
myEllipse.y = 200; 
myEllipse.graphics.lineStyle(0, 0xAAAAAA); 
myEllipse.graphics.moveTo(zeroSector.x, zeroSector.y); 

for (var d:int = 0; d <= 360; d += 5) { 
    var _sector:Object = sector(d, rX, rY); 
    myEllipse.graphics.lineTo(_sector.x, _sector.y); 
} 


addChild(myEllipse); 

// my object 
var bntMc:Sprite = new Sprite(); 
bntMc.graphics.lineStyle(50, 0x002277, 100); 
bntMc.graphics.lineTo(0, 1); 
bntMc.x = zeroSector.x; 
bntMc.y = zeroSector.y; 
bntMc.buttonMode = true; 
myEllipse.addChild(bntMc); 


bntMc.addEventListener(MouseEvent.MOUSE_DOWN, doMouseDown); 
stage.addEventListener(MouseEvent.MOUSE_UP, doMouseOut); 

function doMouseDown(event:MouseEvent):void { 
    stage.addEventListener(MouseEvent.MOUSE_MOVE, doMouseMove);  
}; 

function doMouseOut (event:MouseEvent):void { 
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, doMouseMove); 
}; 

function doMouseMove(event:MouseEvent):void { 
    objPosition(); 
} 

답변

0
import flash.display.Sprite; 
import flash.events.Event; 
import flash.events.MouseEvent; 
var rX:Number = 150; 
var rY:Number = 150; 
var numItems:Number = 12; 
var zeroSector:Object = sector(0, rX, rY); 

function sector(degree:Number, radiusX:Number, radiusY:Number):Object { 
    // coordinates of a point on ellipse 
    var xpos:Number = radiusX * Math.cos(degree * Math.PI/180); 
    var ypos:Number = radiusY * Math.sin(degree * Math.PI/180); 

    // find the angle that has the Y-coords of the mouse position, solve for angle somehow... 
    return {x:xpos, y:ypos}; 
} 


function objPosition():void { // detecting coordinates of a clip 
     var ratio:Number = rX/rY; 

     var anAngle = Math.atan2(mouseX - myEllipse.x, mouseY - myEllipse.y); 
      var deg:Number = 90-(Math.atan2(Math.sin(anAngle), Math.cos(anAngle) * ratio)) * (180/Math.PI); 

     var _sector:Object = sector(deg, rX, rY); 
     trace(_sector.x) 
     bntMc.x = _sector.x; 
     bntMc.y = _sector.y; 

} 

// draw ellipse 
var myEllipse:Sprite = new Sprite(); 
myEllipse.x = 275; 
myEllipse.y = 200; 
myEllipse.graphics.lineStyle(0, 0xAAAAAA); 
myEllipse.graphics.moveTo(zeroSector.x, zeroSector.y); 

for (var d:int = 0; d <= 360; d += 5) { 
    var _sector:Object = sector(d, rX, rY); 
    myEllipse.graphics.lineTo(_sector.x, _sector.y); 
} 


addChild(myEllipse); 

// my object 
var bntMc:Sprite = new Sprite(); 
bntMc.graphics.lineStyle(50, 0x002277, 100); 
bntMc.graphics.lineTo(0, 1); 
bntMc.x = zeroSector.x; 
bntMc.y = zeroSector.y; 
bntMc.buttonMode = true; 
myEllipse.addChild(bntMc); 


bntMc.addEventListener(MouseEvent.MOUSE_DOWN, doMouseDown); 
stage.addEventListener(MouseEvent.MOUSE_UP, doMouseOut); 

function doMouseDown(event:MouseEvent):void { 
    //stage.addEventListener(MouseEvent.MOUSE_MOVE, doMouseMove); 
    bntMc.startDrag(); 
}; 

function doMouseOut (event:MouseEvent):void { 
    //stage.removeEventListener(MouseEvent.MOUSE_MOVE, doMouseMove); 
    bntMc.stopDrag(); 
    objPosition(); 
}; 

function doMouseMove(event:MouseEvent):void { 
    objPosition(); 
} 
+0

은 당신이 수행 할 수 있습니다 것은 원의 circomfrence에 충분히 가까이 있다면 그것은 단지 스냅 할 조건을 추가합니다. – Frank

+0

정확히 무엇을 찾고 있어요! 그 함수를 objPosition()에 두겠습니까? 또는 이벤트 리스너 함수 중 하나에 있습니까? – taranpyper

+0

objPosition()에서 가장 잘 될 것이라고 생각합니다. – Frank