PDA

Volledige versie bekijken : irritant simpel probleem StartDrag


Snuurtje
%Europe/Berlin %846 %2007, 21:18
Hey,

via een knop attach ik een movieclip aan een createnewempty movieclip. Die movieclip wil ik draggable maken. Dat doe ik via de volgende code:

_root.content_mc.contentwindow1.onPress = function() {
this.startDrag(false);
}

echter dan geeft ie de volgende foutmelding over dat zinnetje.

Statement must appear within on/onClipEvent handler

Ik heb geen idee wat ik nou fout doe...

WickedMind
%Europe/Berlin %858 %2007, 21:36
this.onEnterFrame = function(){
_root.content_mc.contentwindow1.onPress = function() {
this.startDrag(false);
}
}

Dauntless
%Europe/Berlin %883 %2007, 22:12
@WickedMind: Misschien best het topic nog eens opnieuw lezen ? ;)

Je moet deze code op een FRAME zetten, niet op een MovieClip. Klik dus het frame van de movieclip aan en druk op F9.

frontLawn.mow()
%Europe/Berlin %683 %2007, 17:23
this.onEnterFrame = function(){
_root.content_mc.contentwindow1.onPress = function() {
this.startDrag(false);
}
}

dit slaat echt nergens op, onEnterFrame de onPress definieren...?

Snuurtje
%Europe/Berlin %691 %2007, 17:35
ok de code van wickedmind werkte wel, al vind ik het vreemd dat er onenterframe bij staat. Volgende probleem. Toen het scherm nog niet draggable was zat er een kruisje waarmee ik het kon removen van het canvas. Nu hij draggable is werkt dit kruisje niet meer. Dit is dus een button die in de draggable MC zit. Iemand enig idee hoe ik die wel aanklikbaar maak?

WickedMind
%Europe/Berlin %699 %2007, 17:47
je button zit dan hierin:
_root.content_mc.contentwindow1
Maar die is niet aan te klikken omdat je die MC al als button hebt gedefinieerd met onPress. Je zou dus eigenlijk een onzichtbare button ter grootte van je contentwindow in die MC moeten plaatsen, onder je close button.

Je verwijzing krijgt dan een extra instance:
_root.content_mc.contentwindow1.dragArea.onPress = function(){

Snuurtje
%Europe/Berlin %790 %2007, 19:58
yes, ik snap wat je bedoelt alleen wat ik al verwachtte gebeurd: dan drag je die onzichtbare movieclip die erinzit (dragArea) maar de rest blijft staan.

Jan
%Europe/Berlin %980 %2007, 00:31
je kan via this._parent.startDrag(false) de parent draggen.
en volgens mij ook via
startDrag(this._parent,false);
of
startDrag(_root.content_mc.contentwindow1,false)
Jan

Snuurtje
%Europe/Berlin %145 %2007, 03:29
oke het wil nog altijd niet lukken, volgens mij zit bij bovenstaande oplossing ook nog altijd mn kruisje button in de gesleepte movieclip en is die dus niet meer aanklikbaar. Ik heb even een voorbeeldtje gemaakt hier te bekijken:
http://www.snuur.nl/files/voorbeeldje_sleepfunctie.fla

Als je op start klikt laadt ie de contentwindow uit de library, je kan m slepen, maar het kruisje is niet aanklikbaar... hoe op te lossen :-S ik heb echt al vanalles geprobeerd.

Gerrit55
%Europe/Berlin %495 %2007, 11:53
Binnen je mc "contentwindow" maak je 2 layers:
layer2 (bovenste) : close_button
layer1 (onderste): Movieclip van je inhoud: instancenaam: content_mc

Verwijder ALLE code , ook die je in je button start hebt staan.
Ga naar Scene1
maak een nieuwe layer > Actions [ Je kunt beter je code gescheiden houden van je content ]
klik op frame1, F9 (actions)

stop();

startbutton.onRollOver = function() {
// geen verwijzing naar _root.startbutton, maar this (=startbutton)
this.gotoAndPlay('1');
}

startbutton.onRollOut = function() {
this.onEnterFrame = function() {
if(this._currentframe == 1) {
delete this.onEnterFrame;
} else {
this.prevFrame();
}
}
}

startbutton.onRelease = function() {
// maak een lege container
var container:MovieClip = createEmptyMovieClip("container", this.getNextHighestDepth());
// zet in deze container je movieclip en geef deze de naam mc1
var mc1:MovieClip = container.attachMovie("contentwindow", "mc1", this.getNextHighestDepth(), {_x:200, _y:100});
// Events van je nieuwe MovieClip mc1
// als je klikt op content_mc (de movieclip die in contentwindow staat) ...
mc1.content_mc.onPress = function () {
// this._parent, omdat je de gehele movieclip wilt draggen
startDrag(this._parent,false);
}
mc1.content_mc.onRelease=function() {
// en dus ook wilt stoppen
this._parent.stopDrag();
}
// Aangezien close_button op een layer staat die boven content_mc staat , is deze klikbaar
// verwijder mc1
mc1.close_button.onRelease = function() {
this._parent.removeMovieClip();
}
}

Jan
%Europe/Berlin %505 %2007, 12:08
mc1.content_mc.onRelease=function() {
// en dus ook wilt stoppen
this._parent.stopDrag();
Ik dacht dat stopDrag(); op zich altijd voldoende was.

voorbeeld:
mc1.mc2.onPress=function(){
startDrag(this._parent);
}
//stoppen met draggen
mc1.mc2.onRelease=function(){
stopDrag(this._parent);//foute syntax
}
//voorbeeld2
mc1.mc2.onRelease=function(){
this._parent.stopDrag();//levert hetzelfde op als de code hieronder
}
//voorbeeld3
mc1.mc2.onRelease=function(){
this.stopDrag();//levert hetzelfde op als de code hieronder
}
//voorbeeld4
mc1.mc2.onRelease=function(){
stopDrag();//levert hetzelfde op als de code hierboven
}

Groeten,
Jan

Dauntless
%Europe/Berlin %525 %2007, 12:37
Je tweede voorbeeld stopt mc1 met draggen. Het derde voorbeeld stopt enkel mc2 met draggen en het derde voorbeeld stopt ook enkel mc2.

Jan
%Europe/Berlin %534 %2007, 12:49
Je tweede voorbeeld stopt mc1 met draggen.
Het derde voorbeeld stopt enkel mc2 met draggen en
het derde vierde voorbeeld stopt ook enkel mc2.
Aangezien je de parent startdragt dmv het child toch niet lijkt het.

http://users.telenet.be/jansurf/drag/draggen.swf

Jan

Dauntless
%Europe/Berlin %546 %2007, 13:07
Heb me net door Bernard in m'n oor laten fluisteren dat je altijd maar 1 ding tegelijk kan draggen... Het maak dus in principe niets uit waar je de startDragstopDrag() op oproept ...

//EDIT
Idd, stopDrag ;)

Jan
%Europe/Berlin %557 %2007, 13:22
Heb me net door Bernard in m'n oor laten fluisteren dat je altijd maar 1 ding tegelijk kan draggen... Het maak dus in principe niets uit waar je de startDrag() op oproept ...

Het maakt natuurlijk uit waarop je de startDrag uitvoert maar niet waarop je stopDrag uitvoert. (Omwille van de reden die je hierboven aanhaalt) Maar dat bedoelde je waarschijnlijk ook. :)

Ik blijf dus bij mijn stelling:
Ik dacht dat stopDrag(); op zich altijd voldoende was. :P :D

En toch...
http://www.adobe.com/support/flash/action_scripts/actionscript_dictionary/actionscript_dictionary570.html

Jan

Gerrit55
%Europe/Berlin %957 %2007, 22:58
ging dit nu over dat bij het draggen het kruisje niet meer werkte ???????

Jan
%Europe/Berlin %960 %2007, 23:02
Ja Gerrit, sorry, we wijken een 'beetje' af.
Al ging het over een stukje van jouw script: :)
mc1.content_mc.onRelease=function() {
// en dus ook wilt stoppen
this._parent.stopDrag();

Jan

Snuurtje
%Europe/Berlin %123 %2007, 02:58
hee, met een hele hoop hakken en beuken op code :p is het toch gelukt vooral met gerrits heldere uitleg, waarvoor dank. Maar ik dacht dat het volgende stapje makkelijk was, dit is het toch niet. Ik heb nu twee buttons, eentje opent het scherm prima, het scherm is sleepbaar en sluitbaar. Maar ik wil nu een tweede scherm ernaast kunnen openen, die beiden sleepbaar zijn. Ik dacht dit te doen met de volgende code

// buttons regelen
//startbutton opent contentwindow
startbutton.onRelease = function() {
// maak een lege container
var container:MovieClip = createEmptyMovieClip("container", this.getNextHighestDepth());
// zet in deze container je movieclip en geef deze de naam mc1
var mc1:MovieClip = container.attachMovie("contentwindow", "mc1", this.getNextHighestDepth(), {_x:200, _y:100});
// Events van contentwindow
// als je klikt op content_mc (onzichtbare MC)
mc1.content_mc.onPress = function () {
// this._parent, omdat je de gehele movieclip wilt draggen
startDrag(this._parent,false);
}
mc1.content_mc.onRelease=function() {
// en dus ook wilt stoppen
this._parent.stopDrag();
}

}
// media opent contentwindow
media_button.onRelease = function() {
// maak een lege container
var container2:MovieClip = createEmptyMovieClip("container2", this.getNextHighestDepth());
// zet in deze container je movieclip en geef deze de naam mc2
var mc2:MovieClip = container.attachMovie("contentwindow", "mc2", this.getNextHighestDepth(), {_x:200, _y:100});
// Events van contentwindow
// als je klikt op content_mc (onzichtbare MC)
mc2.content_mc.onPress = function () {
// this._parent, omdat je de gehele movieclip wilt draggen
startDrag(this._parent,false);
}
mc2.content_mc.onRelease=function() {
// en dus ook wilt stoppen
this._parent.stopDrag();
}
}

echter, op deze wijze opent de tweede knop (media) geen scherm, wanneer ik achter var container2:movieclip de twee weghaal dan opent hij hem wel, is sleepbaar en sluitbaar, maar dan kan ik er geen twee naast elkaar openen. Misschien komt het doordat ik het var stukje niet helemaal snap waar dat nou voor dient... Hoop dat jullie het snappen.

Gerrit55
%Europe/Berlin %362 %2007, 08:41
var mc2:MovieClip = container2.attachMovie

mc2 staat wel in container2

Snuurtje
%Europe/Berlin %528 %2007, 12:41
goed dat was vrij dom van mij, dat krijg je ervan als je zo lang doorgaat snachts, met slaapgebrek enzo. :-/ *schaam*

Anyway, ik heb het gefixed maar hij wil nog steeds geen twee schermen openen naast elkaar... ik heb het bestand maar even bijgevoegd want ik heb het nu al 3x overgekeken, en ik zie nog niet wat het probleem is.

http://snuur.nl/files/voorbeeldje_sleepfunctie.fla

Snuurtje
%Europe/Berlin %550 %2007, 13:12
oke ben er al achter, het heeft te maken met getnexthighestdepth. Hij pakt blijkbaar dezelfde diepte voor beide windows, als ik aan scherm een nummer 2 geef en aan scherm twee nummer 3 dan kan ik er wel twee openen. Alleen heb ik dan niet de controle dat het laatst geopende scherm altijd het bovenliggende scherm is. Dit hoort te kunnen met getnexthighestdepth dacht ik. Dat hij de volgende laag pakt, en dus altijd boven komt te staan. Alleen hij pakt dus dezelfde :S iemand enig idee waarom hij er dezelfde depth aan geeft met getnexthighestdepth.

Sails
%Europe/Berlin %863 %2007, 20:43
hoi! ik heb een soort gelijk probleem. al moet ik erbij zeggen dat ik eigenlijk pas een week bezig ben met Flash en eigenlijk geen verstand heb van AS. al doe ik wel mijn best om dat detail te veranderen :)

ik ben bezig met een website en bij elk venster dat opent moet er een drag button en een close button op zitten. ik krijg het voor elkaar om het venster te draggen zonder de button (dus alleen met mijn cursor op het venster) maar niet met de button.

nogmaals ik heb geen kennis van AS.
hoop dat iemand wilt/kan helpen

hier de link naar mijn .fla

http://www.prettyinboom.com/index/index.fla

dank jullie wel

Orlando

Snuurtje
%Europe/Berlin %909 %2007, 21:49
offtopic:

toevallig orlando die op saxion hogescholen zit en kunst en techniek doet?

(niet veel mensen die zo heten en waarvan ik weet dat ze wel is met flash zouden kunnen werken)