vinTagesworld Flash forum
door suz op 30-03-10 om 12:17
Haai, ik ben bezig met het maken van een tangram puzzel in flash, maar dit wil helaas niet helemaal lukken. Ik ben al zover dat ik de stukjes kan oppakken, loslaten en draaien maar ik krijg het niet voor elkaar dat de stukjes zich ook in de vorm vast klikken. De stukjes moeten namelijk overal in de puzzel kunnen staan omdat de vorm op meerdere manieren is op te lossen. Kan iemand mij hier alsjeblieft bij helpen??
Dit is wat ik tot nu toe heb: (ik weet niet hoe ik het flash bestand kan toevoegen)
actionscript code
//puzzelstukjes oppakken
stuk_geel.addEventListener(MouseEvent.MOUSE_DOWN, pakOp);
stuk_oranje.addEventListener(MouseEvent.MOUSE_DOWN, pakOp);
stuk_rood.addEventListener(MouseEvent.MOUSE_DOWN, pakOp);
stuk_paars.addEventListener(MouseEvent.MOUSE_DOWN, pakOp);
stuk_lichtblauw.addEventListener(MouseEvent.MOUSE_DOWN, pakOp);
stuk_donkerblauw.addEventListener(MouseEvent.MOUSE_DOWN, pakOp);
stuk_groen.addEventListener(MouseEvent.MOUSE_DOWN, pakOp);
//puzzelstukjes loslaten
stage.addEventListener(MouseEvent.MOUSE_UP, laatLos);
//puzzelstukjes draaien
stuk_geel.addEventListener(MouseEvent.DOUBLE_CLICK, DubbelKlik);
stuk_geel.doubleClickEnabled = true;
stuk_oranje.addEventListener(MouseEvent.DOUBLE_CLICK, DubbelKlik);
stuk_oranje.doubleClickEnabled = true;
stuk_rood.addEventListener(MouseEvent.DOUBLE_CLICK, DubbelKlik);
stuk_rood.doubleClickEnabled = true;
stuk_paars.addEventListener(MouseEvent.DOUBLE_CLICK, DubbelKlik);
stuk_paars.doubleClickEnabled = true;
stuk_lichtblauw.addEventListener(MouseEvent.DOUBLE_CLICK, DubbelKlik);
stuk_lichtblauw.doubleClickEnabled = true;
stuk_donkerblauw.addEventListener(MouseEvent.DOUBLE_CLICK, DubbelKlik);
stuk_donkerblauw.doubleClickEnabled = true;
stuk_groen.addEventListener(MouseEvent.DOUBLE_CLICK, DubbelKlik);
stuk_groen.doubleClickEnabled = true;
//draaien
function DubbelKlik(event:MouseEvent):void
{
event.target.rotation += 90;
}
//oppakken
function pakOp(e:MouseEvent)
{
e.target.startDrag();
swap(e.target);
//trace(e.target);
}
function swap(o:*):void
{
var highestDepth:uint = numChildren - 1;
setChildIndex(o, highestDepth);
}
//loslaten
function laatLos(e:MouseEvent)
{
stopDrag();
if(e.target.name == null)
{
return;
}
if(e.target.name.indexOf("stuk") == -1)
{
return;
}
if(puzzel1.hitTestPoint(e.target.x, e.target.y))
{
e.target.x = stuk_paars.x;
e.target.y = stuk_paars.y;
}
}
Kun je de swf eens tonen, zodat je vraag wat duidelijker wordt, want tot nu toe ben ik niet helemaal mee wat betreft je vraag
Beste suz,
Probeerde dat enkele jaren geleden ook eens, maar moest tot mijn schade en schande toegeven dat dat voor mij te hoog gegrepen was.
Mogelijk kan jij het ... ik kijk alvast met argus ogen naar je resultaat ...
Dat het kan weet ik zeker .. maar hoe
Ik hou je in de gaten en succes

Edit:
Mooi voorbeeld op:
http://www.puzzlechoice.com/pc/Tangramx.html
laatst ge-edit op: 30-03-10 om 17:36
door suz op 31-03-10 om 10:55
Bedankt voor het reageren. Bij deze de link. Hier staat meteen de link op naar mijn puzzel. Hoop dat jullie mij zo beter kunnen helpen.
http://portfoliosuz.webklik.nl/page/home laatst ge-edit op: 31-03-10 om 10:56
Dit klopt niet helemaal, maar geeft je al wel een basis om te snappen aan bepaalde "punten"
edit: vergeten te vermelden dat het registratiepunt van "puzzel1" links boven moet zitten en van de puzzelstukken in het midden (laatste was toch al denk ik?)
actionscript code//puzzelstukjes oppakken
stuk_geel.addEventListener (MouseEvent.MOUSE_DOWN, pakOp);
stuk_oranje.addEventListener (MouseEvent.MOUSE_DOWN, pakOp);
stuk_rood.addEventListener (MouseEvent.MOUSE_DOWN, pakOp);
stuk_paars.addEventListener (MouseEvent.MOUSE_DOWN, pakOp);
stuk_lichtblauw.addEventListener (MouseEvent.MOUSE_DOWN, pakOp);
stuk_donkerblauw.addEventListener (MouseEvent.MOUSE_DOWN, pakOp);
stuk_groen.addEventListener (MouseEvent.MOUSE_DOWN, pakOp);
//puzzelstukjes loslaten
stage.addEventListener (MouseEvent.MOUSE_UP, laatLos);
//puzzelstukjes draaien
stuk_geel.addEventListener (MouseEvent.DOUBLE_CLICK, DubbelKlik);
stuk_geel.doubleClickEnabled = true;
stuk_oranje.addEventListener (MouseEvent.DOUBLE_CLICK, DubbelKlik);
stuk_oranje.doubleClickEnabled = true;
stuk_rood.addEventListener (MouseEvent.DOUBLE_CLICK, DubbelKlik);
stuk_rood.doubleClickEnabled = true;
stuk_paars.addEventListener (MouseEvent.DOUBLE_CLICK, DubbelKlik);
stuk_paars.doubleClickEnabled = true;
stuk_lichtblauw.addEventListener (MouseEvent.DOUBLE_CLICK, DubbelKlik);
stuk_lichtblauw.doubleClickEnabled = true;
stuk_donkerblauw.addEventListener (MouseEvent.DOUBLE_CLICK, DubbelKlik);
stuk_donkerblauw.doubleClickEnabled = true;
stuk_groen.addEventListener (MouseEvent.DOUBLE_CLICK, DubbelKlik);
stuk_groen.doubleClickEnabled = true;
//draaien
function DubbelKlik (event:MouseEvent):void
{
event.target.rotation += 90;
}
//oppakken
function pakOp (e:MouseEvent)
{
e.target.startDrag ();
swap (e.target);
//trace(e.target);
}
function swap (o:*):void
{
var highestDepth:uint=numChildren-1;
setChildIndex (o, highestDepth);
}
//loslaten
function laatLos (e:MouseEvent)
{
stopDrag ();
alignen (e.target.name);
}
var snap:Number=8;
var snapPunt:Number=puzzel1.width/snap;//vierkant
function alignen (stuk):void
{
for (var i:Number = 0; i < snap; i++)
{
if (getChildByName(stuk).x < puzzel1.x + (i*snapPunt))
{
getChildByName(stuk).x = puzzel1.x + (i*snapPunt);
break;
}
}
for (var j:Number = 0; j < snap; j++)
{
if (getChildByName(stuk).y <= puzzel1.y + (j*snapPunt))
{
getChildByName(stuk).y = puzzel1.y + (j*snapPunt);
break;
}
}
}
laatst ge-edit op: 01-04-10 om 00:16
door suz op 01-04-10 om 13:05
Super bedankt! Dit is precies wat ik bedoelde, geeft alleen een error (die ik niet begrijp) wanneer ik op de achtergrond klik.
TypeError: Error #2007: Parameter name must be non-null.
at flash.display::DisplayObjectContainer/getChildByName()
at puzzel2_fla::MainTimeline/alignen()
at puzzel2_fla::MainTimeline/laatLos()
Dit moet ik dus nog even uitzoeken.
edit: Dit probleem heb ik op kunnen lossen door bij de functie 'laatlos' ook alle stukjes apart te benoemen. Misschien niet een hele nette manier, maar het werkt.
Alleen de stukjes verspringen nu nog een beetje wanneer ik er eenmaal op klik, ga daar nu even naar kijken.
laatst ge-edit op: 01-04-10 om 13:50
Je moet
aangemeld zijn om te kunnen reageren.