I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Instancenavnet er korrekt. Men jeg er ikke sikker på, at jeg har bygget brikkerne rigtigt op. Brikkerne består af et movieclip med en knap i......Gav det mening?
Jeg har lige testet med din kode, og der er ingen fejl. Jeg både start- og stopDragger, samt placerer brikken på dest1. Som du har lavet koden ender brik1 på dest1 uanset hvor man placerer den henne, er det meningen?
Jeg har endnu ikke modtaget filen, men prøv at se actions på dit movieclip brik1. Hvis du har sat koden her virker det nemlig ikke. Cut koden og indsæt den på knappen der er placeret indeni dit movieclip... så burde det virke ;0)
Det er nemt nok, har lige modtaget filen, ser på den og melder tilbage, men du kan lige læse dette:
I din if sætning efter (release) siger du, at hvis x- og y-værdien ikke er det samme som dest1\'s x-og y-værdier, så skal brik1 placeres på dest1. Dette skal nok også lige rettes, jeg ser på filen...
All rightie, jeg har lige rodet lidt i din fil... here goes.
1. Jeg har nu indsat koden på din knap. Du kan ikke have en if sætning med _droptarget på dit (press) mouseEvent - kun på (release). Tilgengæld har du slet ikke brug for den if sætning der var på (release) i forvejen, den gør som sagt ikke andet end at placere din brik på dest1 uanset hvor du stopDragger. Jeg har derfor rykket if sætningen fra (press) ned til(release) og slettet den anden. Jeg er ikke klar over hvad du vil bruge variablen \'teller\' til, hvis det er til at måle hvor mange brikker der ER placeret skal _root.teller = _root.teller+1; eller endnu nemmere blot _root.teller ++ ; bare indsættes efter if sætningen på (release), men ikke I if sætningen, udenfor dens tuborg klammer. Jeg har indsat den med // foran, disse kan du blot fjerne for at aktivere sætningen.
2. Derudover havde du et grafik element af dit puslespil liggende i et layer over alle dine destinationer. Dvs. dit droptarget vil altid være dette grafik element, aldrig dine dest\'s. Det eneste dette element gør, er at give dit puslespil en alpha værdi på 65%. Jeg har fjernet dit grafik instance og blot givet alle dine dest MC\'s (der jo ligner dit grafik element) en alpha værdi på de 65%.
Jeg har sendt filen tilbage så du kan se på den, dog desværre først i morgen tidligt. Hvis du har flere spørgsmål kan du bare komme med dem.
I øvrigt var din fil umulig at læse for windows, Flash kunne dog genkende den, men der var indsat et - É - tegn alle steder hvor du havde mellemrum... Mac <-> PC giver underlige problemer, men det lykkedes da ;0)
Tak for det. Det virker jo dejligt, men kan du give en logisk forklaring på, at hvis jeg kopierer koden til foreksempel brik2 og retter alle 1-tallerne til 2-taller, så det gælder for brik2 og dest2, så flytter brikken sig godt nok, men den falder ikke på plads .... Jeg synes det virker mæærkeligt.
Variablen teller skal bruges til at kontrollere om alle brikker er lagt på plads, for så skal filmen fortsætte til frame 10. Der er måske en anden måde at gøre det på?
Blev mit spørgsmål uinteressant eller hvad. Nu har jeg revet alt mit hår af mit lille hoved i desperation over hvad der er galt. Jeg kan ikke forstå det. God weekend til alle.
Nej, da jeg har bare ikke haft tid og skal endnu en gang ud nogle timer. Er muligvis først tilbage søndag. Kommer lidt an på hvor lidt og hvor meget der sker når nu jeg er sammen med drengene i morgen middag.
Jeg har ikke været hjemme før nu, og har derfor ikke set dine kommentarer. Grunden til at brikkerne ikke falder på plads, efter du har kopieret koden og rettet i tallene er dine instance navne. Du skal huske at gennem tjekke alle instance navne, for det er helt sikkert at dine dest MC\'s ingen instance navne har.
Se logisk på din fil, hvis du kan dragge brikkerne men de ikke falder på plads, så prøv først og fremmest at se på destinationerne for brikkerne. Gå hele din movie igennem, tjek og dobbelt-tjek dine instance navne, så er jeg sikker på det virker.
Jeg regner med du kommer til at læse mine indlæg i morgen tidlig. Jeg har en ret travl dag foran mig med mange møder, men jeg vil dog tjekke op på eksperten et par gange i løbet af dagen. Du er ikke glemt, og jeg skal nok guide dig videre så alt virker efter planen ;0)
Jaja, jeg skal nok tjekke mine instance-navne igen ... Det har jeg så gjort og selvfølgelig virker det. Øv du havde jo ret :o)
Hvergang jeg lægger en brik på plads lægges der 1 til teller og nå den så når 15, skal filmen gå til frame (slut) (det har jeg navngivet den) Men det gør den ikke. Hvorpå skal skrive det stykke action der gør at den fortsætter. På hovedfilmens actionlayer eller på hver enkel brik, så den tjekker værdien af teller inden den lægger brikken helt på plads?
Det var da herligt at det blot var instancenavne :0)
Jeg har nogle forslag til opbygningen af din movie...
1. For at have styr på variabler plejer jeg at lave et tomt movieclip som jeg plejer at kalde controller. Ved brug af ClipEvents kan man nemlig hele tiden controllere om en given påstand er opfyldt. Denne idé benytter jeg nu, og jeg vil foreslå du gør det samme. Derfor laver du nu et tomt movieclip, lav en firkant eller noget i den stil - F8 - navngiv det controller og vælg movieclip. Fjern kassen indeni og du har et tomt movieclip. Vi skal intet lave indeni dette, kun benytte dets muligheder med clip events. Placer dette movieclip i et layer for sig i frame 5, der hvor puslespillet ligger. Helt ude i roden af din movie markerer du dette MC, vælger acttions panelet og skriver (copy/paster) dette:
onClipEvent(load){ teller = 0; }
onClipEvent(enterFrame){ if (teller == 1){ _root.gotoAndStop(\"slut\"); } }
I det øjeblik din Movie bliver loadet bliver variablen teller sat til o. Derfor har du ikke behov for teller = 0; på din frame længere. Et clip event med enterFrame bliver tjekket igennem løbende, mange gange i sekundet sålænge det pågældende movie clip er i en aktiv frame. Da vi har en stop(); action i frame 5 hvori controller MC\'et er placeret gøres dette altså fortløbende.
Gør dette først, jeg skriver videre nye kommentarer så du kan følge med, ok?!
Vi har nu sikret os at din movie går til frame slut når variablen teller får værdien 15. Problemet er nu, at teller stiger fortløbende for hver gang du stopDragger et target, og ikke kun hver gang en brik er placeret. Dette skal nu rettes, lige som man ikke (regner jeg med) skal kunne samle en brik op igen efter den er placeret rigtigt. Er dette rigtigt? Det går jeg udfra nu...
Den eneste action der skal være i frame 1 er stop(); Vi ser nu på dine actions i frame 5 hvorfra selve spillet ligger, og derfor er det her du skal påvirke din movie. Vi har allerede defineret variablen teller på movieclippet controller, så denne skal ikke defineres her. Derimod skal du, udover at have en stop(); action definere din depthHolder. Dvs. frame 5 actions er:
stop(); depthHolder = 0;
Desuden definerer vi nu en variabel for hver brik. Denne kalder vi placeretBrik1, placeretBrik2 etc på til 15. Vi benytter disse variabler til at undersøge hvorvidt en brik er placeret, og dermed om teller skal stige i værdi og om man må dragge med brikken igen. Dette kommer vi til på brikkernes knapper. For nu skal du altså have dette som frame 5\'s actions:
Vi ser nu på knapperne i dine brik movieclips. Jeg bruger brik1 som udgangspunkt, alle de andre knapper følger så med i samme stil blot med deres respektive numre.
Vi fandt ud af man kun måtte dragge din brik hvis denne endnu ikke var placeret på sin destination, til dette benyttes variablen placeretBrik1. Derfor starter vi med en if sætning på din \'on (press)\' på knappen. Denne ser således ud:
if (_root.placeretBrik1 == false ){ // indholdet kommer her om lidt :0) }
Alle dine placeretBrikX er defineret i samme frame som værende false, dvs. 1. gang man forsøger at dragge brikken er dette muligt. Vi sætter placeretBrik1 til true om lidt...
Så, hele din action 1. del af actions på knappen ser således ud:
on (press) { if (_root.placeretBrik1 == false ){ startDrag (_root.brik1); _root.depthHolder++; this.swapDepths(_root.depthHolder); } }
Vi skal nu igang med dine actions når man stopper med at dragge dine brikker...
Hvis brikkens _droptarget er den pågældende destination skal variablen placeretBrik1 sættes til true, så er brikken placeret hvor den skal, og jvf. actions på \'on (press)\' kan man ikke dragge denne brik igen. Ligeledes skal vi have variablen teller til at stige i værdi, men KUN når brikken er placeret hvor den hører til. Derfor kommer dine \'on (release)\' actions til at se ud som følger:
if sætningen tjekker hvorvidt din brik\'s droptarget er destinationen såvel som at brikken endnu ikke er placeret. Hvis vi ikke skriver \'&& _root.placeretBrik1 == false\' er det nemlig muligt blot at clicke på din brik efter den er placeret og variablen teller stiger i værdi. Det skal den kun én gang for hver brik.
Dvs. hvis destinationen er korrekt og brikken endnu ikke er blevet placeret er din if sætning opfyldt og en statement bliver udført. Så definerer vi brikkens x og y værdier som værende destinationen og brikken \'falder på plads\'.
Desuden sætter vi variablen _root.placeretBrik1 = true; - og dermed ved vi at brikken er placeret korrekt, det er nu ikke muligt at dragge den igen, det kan vi li\' :0)
Til slut har vi variablen teller, denne fastsætter som aftalt om alle brikkerne er placeret på deres respektive destinationer. Da vi har skabt et tomt MC kaldet controller, og derpå defineret variablen teller = 0; med clip event\'et (load) skal det også være her vi forøger værdien teller. Dvs. vi skriver _root.controller.teller ++ ; istedet for blot at have variablen liggende i _root. Med dit clipEvent(enterFrame) på controller MC\'et tjekker vi som sagt fortløbende om teller = 15.
Det du nu skal huske er, at give dit movieclip instance navnet controller, ellers forøges variablen teller ikke.
Hvis du så har en frame i main timeline med en label \'slut\' vil din movie\'s playhead altså bevæge sig til denne frame når if sætningen på controller MC\'et er opfyldt, når variablen teller har fået værdien 15. Dette sker nu kun når alle dine brikker er placeret korrekt.
Det skulle vist være det, så burde du have et fint funktionelt puslespil :0)
Det var en del kontant tekst, men jeg ville hellere lige have det hele med fremfor at skulle uddybe...
Jeg håber du kan se sammenhængen i det hele nu. Jeg ville gerne have dig til at se på din movie med nye øjne, altså se hvor logisk det rent faktisk er. Det håber jeg er lykkedes, ellers skriver du jo bare :0)
Jeg skal lige om snart til endnu et møde (dammit dammit), men ellers følger jeg op på det igen i aften...
Nu er der vist kun småting tilbage. Når jeg når til frame(slut), giver jeg valgmuligheden om igen eller helt slut. Hvis jeg vælger igen og går til frame 5 igen, går der fuldstændig ged i den. Brikkerne kommer på ny, men de brikker jeg har lagt på plads i første spil, lægger der stadig og giver problemer i flytningen. Hvordan grejer jeg lige det. Der må være noget der skal nulstilles. Brikker må skulle laves true.
Hej Donslund. Jeg kom hjem så sent igår at jeg ikke fik set på din fil. Min dag idag ser desværre lige så travl ud, så hvis du gerne vil have hurtig hjælp videre i forløbet må du nok prøve at få fat på nogle andre. Jeg kunne forestille mig det var noget med placeretBrikX skal sættes til false igen, samt dine swapDepths....
På min ja knap i frame 10 sætter jeg alle placeretBrii til false og swapdepths og teller sættes til 0. Det hjælper ikke. Kig på det hvis du får tid. Jeg pusler selv lidt videre, men løser næppe selv problemet :o)
jeg vil hellere end gerne tilbyde min hjælp. Jeg har tidligere lavet et puslespil men havde dog det problem, at når man valgte 12*18 brikker, så kørte det hele dræbende langsomt. Det tog også lang tid at fremstille 216 brikker. Send den gerne på morten@barklund.dk
Jeg gik lidt i selvsving i nat og rev hele dit puslespil rundt. Det var ikke helt planen, men nu ligner koden meget lidt den vi har udarbejdet sammen. Jeg har ikke lige filen her, den er hjemme, men jeg sender så snart jeg kan. Du skal nok forberede dig på at læse om nogle punkter i Using Flash. Eksempelvist \'do while\' iteration og movieClipEvents som mouseUp, mouseDown, selvfølgeligt enterFrame og load. Desuden måske om hitTest (bruger ikke længere _droptarget). Det blev nemlig en lidt indviklet affære ;0)
Jeg har lige sendt filen til dig. Jeg kan se jeg har lavet lidt bugs i den i nat, men jeg har desværre ikke lige umiddelbart mere tid til at se på dette puzzle. Hvis du sætter dig lidt ind i de funktioner jeg har benyttet burde du (forhåbentligt) også selv kunne greje den :0)
Jeg har som sagt rettet en del, gjort brug af \'knap-hånden\' de korrekte steder, så man ikke tror man kan trykke på en placeret brik m.m. Der er ændret MEGET, men stadig lidt bugs. Se filen igennem, og ellers må du oprette et nyt spørgsmål om de relevante problemer, jeg har i hvert fald meget begrænset tid... men vil se om jeg har tid til at finde fejlen (som i øvrigt må være lille).
Nu burde du vist også have fået mere end rigeligt svar på dit primære spørgsmål :0)
...Der skete en fejl i den sendte mail og den fil jeg modtog havde det ikke så godt. Det var i mailen, at der var en fejl - ikke i filen.
Kan du ikke lige sende den igen?
Send gerne den reviderede version, da jeg har kendskab til og erfaring med alle objekter i Flash med undtagelse af XMLSocket... (skulle bare lige nævnes :)
Barklund, jeg er efterhånden kommet så langt i forløbet at det vil være surt for os begge hvis du laver det hele på ny. Ellers kan jeg sende min fil til dig, så kan du rette videre i den. Jeg har simpelthen ikke tid lige nu, og det er højst sandsynligt en lille fejl. Desuden er jeg PC bruger, så det gør det hele nemmere :0)
fejlen i det gamle var kun, at de gamle movieClips blev sendt til højere levels og gjort usynlige. Andre levels forsvinder ikke, bare fordi man går til en ny frame, så der fandtes pludselig to af alle brikker, hvor nogle af dem dog var usynlige. 3 gang var der så 3 af hver, hvor af 2 var usynlige, og så videre. Da alle havde samme navn, men kun en reagerer på actionScripts, går det galt!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.