2011-02-28 3 views
0

새 메시지 - 내가 끝낸 해결책AS3을 사용하여 드래그 앤 드롭 객체에 외부 이미지를로드하는 방법은 무엇입니까?

이것은 외부 이미지를 무비 클립에로드하고 끌어서 놓기 위해 사용했던 것입니다. 피드백 부분은 이전 코드와 거의 같습니다.

var holdermc_Arr:Array = new Array(4); 
for(var i:uint = 0; i < holdermc_Arr.length; i++) 
{ 
    holdermc_Arr[i] = this["panel" + (i+1) + "_mc"]; 

    var myLoader:Loader = new Loader(); 
    var fileRequest:URLRequest = new URLRequest("images/" + (i+1) + ".jpg"); 
    myLoader.load(fileRequest); 

    holdermc_Arr[i].addChild(myLoader); 

    holdermc_Arr[i].addEventListener(MouseEvent.MOUSE_DOWN, pickUp); 
    holdermc_Arr[i].addEventListener(MouseEvent.MOUSE_UP, dropIt); 
    holdermc_Arr[i].buttonMode = true; 
} 

var startX:Number; 
var startY:Number; 
var counter:Number = 0; 

function pickUp(event:MouseEvent):void { 
startX = event.currentTarget.x; 
startY = event.currentTarget.y; 

setChildIndex(MovieClip(event.currentTarget),numChildren-1); 
event.currentTarget.startDrag(); 
reply_txt.text = ""; 

} 

OLD 메시지 벨로

이 내가 점점 오전 현재 오류 내 최신 시도이다.

나에게 여러 개의 드래그 가능한 무비 클립을 추가하는 것이 더 쉽기 때문에 실제로 이전 코드의 코드로 작업하고 싶습니다.

하지만 코드 중 가장 근본적인 문제는 "로더"에 대해 올바르게 속성을 설정하지 않는다는 것입니다.

예에 대한 링크가 필요한지 알려주세요.

ReferenceError: Error #1069: Property dropTarget not found on flash.display.Loader and there is no default value. at cs5test_fla::MainTimeline/ReleaseToDrop()

코드 오래된 메시지 우는 소리가

난 여전히 고군분투하고

var myLoader:Loader = new Loader(); 
panel1_mc.addChild(myLoader); 
var url:URLRequest = new URLRequest("uploadedImages/photo_1.jpeg"); 
myLoader.load(url); 

var startX:Number; 
var startY:Number; 
var counter:Number = 0; 

panel1_mc.addEventListener(MouseEvent.MOUSE_DOWN, ClickToDrag); 

function ClickToDrag(event:MouseEvent):void 
{ 
panel1_mc.startDrag(); 
startX = event.target.x; 
startY = event.target.y; 
    reply_txt.text = ""; 
event.target.parent.addChild(event.target); 
} 

stage.addEventListener(MouseEvent.MOUSE_UP, ReleaseToDrop); 

function ReleaseToDrop(event:MouseEvent):void 
{ 
panel1_mc.stopDrag(); 
var myTargetName:String = "target" + event.target.name; 
var myTarget:DisplayObject = getChildByName(myTargetName); 

if (event.target.dropTarget != null && event.target.dropTarget.parent == myTarget){ 

    reply_txt.text = "Good Job!"; 
    event.target.x = myTarget.x; 
    event.target.y = myTarget.y; 
    event.target.removeEventListener(MouseEvent.MOUSE_DOWN, ClickToDrag); 
    event.target.removeEventListener(MouseEvent.MOUSE_UP, ReleaseToDrop); 
    event.target.buttonMode = false; 
    counter++; 
} else { 
    reply_txt.text = "Try Again!"; 
    event.target.x = startX; 
    event.target.y = startY; 
} 
if(counter == 1){ 
    reply_txt.text = "Congrats, you're finished!"; 
} 
} 

다음

입니다 :

오류는 다음과 같다.

나는이 모든 것에 익숙하지 않기 때문에 나는 그것을 이해할 수있는 최선의 방법을 동원하고있다.

작동하려는 ActionScript가 맨 아래에 있습니다.

누군가이 코드를보고 다음 오류가 발생하지 않고 각각의 드래그 가능한 무비 클립에 외부 이미지를로드하는 방법을 알려 주시면 감사하겠습니다.

ReferenceError: Error #1069: Property startDrag not found on flash.display.Loader and there is no default value. at dragdropDilema_fla::MainTimeline/pickUp() ReferenceError: Error #1069: Property stopDrag not found on flash.display.Loader and there is no default value. at dragdropDilema_fla::MainTimeline/dropIt()

나는 간단한 VAR 로더를 사용하려고하지만 오류에 볼 수있는, 나는로드 된 이미지가 아니라 현재에있는 드래그 무비 클립과 함께 작동하도록하여 startDrag 속성을 설정해야 장소??

var myLoader:Loader = new Loader(); 
imageHolder.addChild(myLoader); 
var url:URLRequest = new URLRequest("uploadedImages/photo_1.jpeg"); 
myLoader.load(url); 

을 다음과 같이 수행합니다 :

는 난 그냥 내가 각각에 대해 다음 사용했다면 간단했을 것이다 생각

square_mc.imageHolder.addChild(myLoader); 

을하지만 난 그렇게 할 때 나는 오류 어쨌든 내가 이미지를 클릭하면.

전체 코드는 다음과 같습니다. 오브젝트가 대상을 충족시키고 끝까지 메시지를 보낼 때 계산됩니다.

panel1_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp); 
panel1_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt); 

panel1_mc.buttonMode = true; 


var startX:Number; 
var startY:Number; 
var counter:Number = 0; 

function pickUp(event:MouseEvent):void { 
startX = event.target.x; 
startY = event.target.y; 
event.target.startDrag(true); 
reply_txt.text = ""; 
event.target.parent.addChild(event.target); 
} 

function dropIt(event:MouseEvent):void { 
event.target.stopDrag(); 
var myTargetName:String = "target" + event.target.name; 
var myTarget:DisplayObject = getChildByName(myTargetName); 
if (event.target.dropTarget != null && event.target.dropTarget.parent == myTarget){ 
    reply_txt.text = "Good Job!"; 
    event.target.x = myTarget.x; 
    event.target.y = myTarget.y; 
    event.target.removeEventListener(MouseEvent.MOUSE_DOWN, pickUp); 
    event.target.removeEventListener(MouseEvent.MOUSE_UP, dropIt); 
    event.target.buttonMode = false; 
    counter++; 
} else { 
    reply_txt.text = "Try Again!"; 
    event.target.x = startX; 
    event.target.y = startY; 
} 
if(counter == 1){ 
    reply_txt.text = "Congrats, you're finished!"; 
} 
} 

감사합니다.

+0

안녕하세요 Antonio, 질문에 코드를 추가해주세요. 물론 관련 비트 만, 감사합니다. Rob – robertp

+0

Rob. FLA에 대한 링크를 실험하고 있습니다. 액션 스크립트는 페이지 절반에 불과하며 205kb입니다. – antoniog447

+0

도움을 끌기를 원하십니까? 이전에 게시 한 내용에서 오류가 발생했다는 메시지가 나타납니다. –

답변

1
import flash.display.DisplayObjectContainer; 
import flash.display.Loader; 
import flash.display.MovieClip; 
import flash.events.Event; 
import flash.events.MouseEvent; 
import flash.net.URLRequest; 

var _dragMc:MovieClip = new MovieClip(); 
addChild(_dragMc); 

loadImage("image.jpg") 

function loadImage(path:String):void 
{ 
    var _loader:Loader = new Loader(); 
    var _loaderToLoad:URLRequest = new URLRequest(path); 
    _loader.load(_loaderToLoad); 
    _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded, false, 0, true); 
} 

function imageLoaded(evt:Event):void 
{ 
    addLoader(evt.currentTarget.loader, _dragMc); 
} 

function addLoader(loader:Loader, container:DisplayObjectContainer):void 
{ 
    container.addChild(loader); 
    addListeners(); 
} 

function addListeners():void 
{ 
    _dragMc.addEventListener(MouseEvent.MOUSE_DOWN, setDrag, false, 0, true); 
} 

function setDrag(evt:MouseEvent):void 
{ 
    _dragMc.addEventListener(MouseEvent.MOUSE_MOVE, doDrag, false, 0, true); 
    _dragMc.removeEventListener(MouseEvent.MOUSE_DOWN, setDrag); 
} 

function doDrag(evt:MouseEvent):void 
{ 
    _dragMc.startDrag(false, null); 
    stage.addEventListener(MouseEvent.MOUSE_UP, endDrag, false, 0, true); 
    _dragMc.removeEventListener(MouseEvent.MOUSE_MOVE, doDrag); 
} 

function endDrag(evt:MouseEvent):void 
{ 
    _dragMc.stopDrag(); 
    _dragMc.addEventListener(MouseEvent.MOUSE_DOWN, setDrag, false, 0, true); 
    stage.removeEventListener(MouseEvent.MOUSE_UP, endDrag); 
} 

이것은 _dragMc라는 MovieClip에 이미지를로드합니다. 나머지는 당신에게 달린 것입니다. _dragMc을 드래그 할 수있는 몇 가지 빠른 코드도 추가했습니다.