PDA

Volledige versie bekijken : array als droptarget


gzzle
%Europe/Berlin %100 %2009, 02:24
Ola!

Ik heb een vraagje.. of iemand mij opweg kan helpen...

Ik heb een container, met daarin een mc. Deze mc moet uit de container worden gedragged en in een andere container gedropped kunnen worden. So far so good...

Alleen heb ik nu met meerdere droptargets te maken. Ik heb een array met 64 droptargets. Ik heb die 64 mc's netjes middels een array op een bepaalde manier op de stage geplaatst. Het punt is nu, dat ik het niet voor elkaar krijg om de mc die draggable is (wat er uiteindelijk 10 worden), op één van de 64 droptargets te kunnen plaatsen. Althans, de 64 mc's krijg ik niet als droptarget voor elkaar. Waarschijnlijk doe ik iets fout, maar ik kom er maar niet uit wat het is.

Hier is de code:


package
{
import flash.display.MovieClip;
import flash.display.Shape;
import flash.display.Sprite;
import flash.display.Stage;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.display.SimpleButton;
import flash.text.*;
import fl.controls.Button;
import flash.display.BitmapData;



public class main2 extends Sprite
{
private var containers:Array = new Array(64);
private var bieb:MovieClip;
private var myFormat:TextFormat = new TextFormat();
private var wissen:Button = new Button();
private var weergave:Button = new Button();
private var ledSym:MovieClip;
private var _dragging:Boolean;
private var _lastContainer:MovieClip;
private var _originx:Number;
private var _originy:Number;

public function main2()
{
bieb = new mc_bieb();
bieb.x = 36;
bieb.y = 109.2;
addChild(bieb);

_dragging = false;
_lastContainer = bieb;

ledSym = new mc_led_sym();
ledSym.x = 53;
ledSym.y = 30;
ledSym.buttonMode = true;
bieb.addChild(ledSym);
ledSym.addEventListener(MouseEvent.MOUSE_DOWN, dragLed);
ledSym.addEventListener(MouseEvent.MOUSE_UP,dropLe d);

for (var i:int = 0; i < containers.length; i++)
{
containers[i] = new mc_container();
containers[i].x = 383.2 + (containers[i].width + 19) * i - (Math.ceil((i + 1) / 8 - 1) * 428);
containers[i].y = 111 + (Math.ceil((i + 1) / 8) - 1) * 54;
addChild(containers[i]);
}

}
private function dragLed (event:MouseEvent):void
{
if (!_dragging)
{
_originx = ledSym.x;
_originy = ledSym.y;

_lastContainer.removeChild(ledSym);

ledSym.x = mouseX;
ledSym.y = mouseY;

stage.addEventListener(MouseEvent.MOUSE_MOVE, moveLed);
stage.addChild(ledSym);
_dragging = true;
}
}

private function dropLed (event:MouseEvent):void
{
_dragging = false;
stage.removeEventListener(MouseEvent.MOUSE_MOVE, moveLed);

if (ledSym.hitTestObject(bieb))
{
stage.removeChild(ledSym);
bieb.addChild(ledSym);
ledSym.x = _originx;
ledSym.y = _originy;
_lastContainer = bieb;
}
//HIER IS WAAR HET FOUT GAAT
else if (ledSym.hitTestObject(containers[i]))
{
stage.removeChild(ledSym);
containers[i].addChild(ledSym);
ledSym.x = containers[i].x;
ledSym.y = containers[i].y;
_lastContainer = containers[i];
}
// TOT HIER.
else
{
stage.removeChild(ledSym);
_lastContainer.addChild(ledSym);
ledSym.x = _originx;
ledSym.y = _originy;
}
}

private function moveLed(event:MouseEvent):void
{
ledSym.x = stage.mouseX;
ledSym.y = stage.mouseY;
}
}
}


iemand een idee???

thnx.

tilpo
%Europe/Berlin %352 %2009, 08:27
"ledSym.addEventListener(MouseEvent.MOUSE_UP,dropLe d)"
volgens mij hoort daar geen spatie tussen 8~

Maar volgens mij is het zo dat als je de dropLed functie aanroept, dat i geen waarde heeft. Ik zou in de dropLed functie een for loop plaatsten, kijken of het dan wel werkt.
for(i=0;i<containers.length;i++) {
if (ledSym.hitTestObject(bieb)) {
stage.removeChild(ledSym);
bieb.addChild(ledSym);
ledSym.x = _originx;
ledSym.y = _originy;
_lastContainer = bieb;
}
//HIER IS WAAR HET FOUT GAAT
else if (ledSym.hitTestObject(containers[i]))
{
stage.removeChild(ledSym);
containers[i].addChild(ledSym);
ledSym.x = containers[i].x;
ledSym.y = containers[i].y;
_lastContainer = containers[i];
}
}
}
//

gzzle
%Europe/Berlin %623 %2009, 14:57
Hi Tilpo,

thnx! Ik ga het gelijk proberen!!!!

Ow.. en wat betreft die spatie.. denk dat dat met plakken is gebeurd... haha..

Maar thnx voor je help! Hopelijk werkt het!

gzzle
%Europe/Berlin %908 %2009, 21:47
Hi..

heb het inmiddels geprobeerd.. maar no such luck... ;-(

Het werkt niet en krijg de volgende foutmelding 8 keer:

1120: Acces of undefined property i.

En dat gaat allemaal om het gedeelte wat in bovenstaande code van Tilpo staat...

Jammer.. leek me ook een goede oplossing.. Maar ik weet niet wat ik eraan moet doen. Heb de foutcode ook nog eens extra bekeken. Ik heb geen idee meer hoe ik het op moet lossen...

Iemand anders een ideetje??

@ Tilpo: In ieder geval bedankt dat je er ff naar hebt gekeken!

gzzle
%Europe/Berlin %913 %2009, 21:55
btw...

als ik er een variabele van maak, dus zo:


for(var i=0;i<containers.length;i++) {
if (ledSym.hitTestObject(bieb)) {
stage.removeChild(ledSym);
bieb.addChild(ledSym);
ledSym.x = _originx;
ledSym.y = _originy;
_lastContainer = bieb;
}
else if (ledSym.hitTestObject(containers[i]))
{
stage.removeChild(ledSym);
containers[i].addChild(ledSym);
ledSym.x = containers[i].x;
ledSym.y = containers[i].y;
_lastContainer = containers[i];
}
}
}


Dan lijkt het goed te gaan. Krijg geen foutmeldingen met exporteren. Totdat ik de mc op een container wil plaatsen. Dan krijg ik het volgende in de output:

ArgumentError: Error #2025: Het opgegeven DisplayObject moet een onderliggend item van de aanroeper zijn.
at flash.display:: DisplayObjectContainer/removeChild()
at main2/dropLed()


Ik begrijp niet helemaal hoe ik dat dan moet oplossen. Heb het idee dat ik wel in de goede richting zit.. maaaaarr....???

gzzle
%Europe/Berlin %930 %2009, 22:19
Heeft dat iets met depths te maken???

gzzle
%Europe/Berlin %958 %2009, 22:59
Als ik de for lus verplaats:


if (ledSym.hitTestObject(bieb))
{
stage.removeChild(ledSym);
bieb.addChild(ledSym);
ledSym.x = _originx;
ledSym.y = _originy;
_lastContainer = bieb;
}
else if (ledSym.hitTestObject(containers[i]))
{
for (var i = 0; i < containers.length; i++)
{
stage.removeChild(ledSym);
containers[i].addChild(ledSym);
ledSym.x = containers[i].x;
ledSym.y = containers[i].y;
_lastContainer = containers[i];
}
}


Dan dragged ie wederom goed, en hij dropped hem wel op een container, maar vervolgens kan ik hem niet meer oppakken. Hij blijft daar vaststaan. Tevens krijg ik het volgende in mn output:


TypeError: Error #2007: Parameter hitTestObject mag niet null zijn.
at flash.display:: DisplayObject/_hitTest()
at flash.display:: DisplayObject/hitTestObject()
at main2/dropLed()


Als ik toch probeer om de net geplaatste mc op te pakken.. en ik klik erop.. dan krijg ik het volgende in de output:


ArgumentError: Error #2025: Het opgegeven DisplayObject moet een onderliggend item van de aanroeper zijn.
at flash.display:: DisplayObjectContainer/removeChild()
at main2/dragLed()


Heeft ook geen nut dus.. Iemand nog een goed idee?

thnx alvast voor de eventuele moeite!

tilpo
%Europe/Berlin %973 %2009, 23:22
Yep error #2025 de error waar ik persoonlijk gek van word. Ben er jammergenoeg zelf niet geheel achter hoe je het in jouw geval kan verhelpen. [V]

gzzle
%Europe/Berlin %979 %2009, 23:30
Ja ik word er ook behoorlijk gek van! Maargoed, thnx for trying!!

Ik begrijp nu echt niet meer hoe ik het op kan lossen.

Een allerlaatste oplossing kan zijn om alle 64 containers gewoon per container apart op de stage te plaatsen.. ipv in een array.. en ze dan allemaal als droptarget benoemen, daar wordt mijn code wel 10 pagina's langer van.. hahaha.. en ik ben er van overtuigd dat het beter kan.. maar ik loop nu echt goed vast.. pff...

gzzle
%Europe/Berlin %421 %2009, 10:06
Goed, ik heb er inmiddels een nachtje over geslapen in de hoop dat ik het antwoord wel zou dromen ;-)... Maar helaas..

Heeft iemand een idee??

tilpo
%Europe/Berlin %549 %2009, 13:11
Misschien kan deze (http://www.kirupa.com/forum/showthread.php?t=313264) thread je helpen?

gzzle
%Europe/Berlin %591 %2009, 14:11
thnx again tilpo.. tof dat je me probeert te helpen!

kga er naar kijken!

Svedberg991
%Europe/Berlin %585 %2009, 14:02
Leek me ook een goede oplossing. Maar ik weet niet wat ik eraan moet doen. Heb de foutcode ook nog eens extra bekeken. Ik heb geen idee meer hoe ik het op moet lossen.




------------------------------
Onderdelen winkel Computer (http://www.bestewaardebonnen.nl/Categorieen/Computers_en_software/)