12. marts 2002 - 13:37Der er
12 kommentarer og 2 løsninger
Farven er sort!?
Jeg har et mystisk farve spørgsmål.
Jeg vil lave en ganske enkel effekt, men forstår ikke hvad der går galt. Planen er, at ved rollOver på en knap ændrer et movieclip farve, ved rollOut ryger det tilbage til sin oprindelige farve, og ved press på knappen forbliver clippets farve den nye.
Til at begynde med har jeg lavet et textbook eksempel af Colin Moock, hvor jeg begynder med at definere en function som
function combineRGB (red, green, blue) { var RGB = (red<<16) | (green<<8) |blue; return RGB; }
Denne function benytter jeg så til at sammensætte den ønskede farve. For nemheds skyld kommer hele min opbygning her...
På selve knappen har jeg denne simple action:
on (rollOver) { farve = true; } on(rollOut){ farve = false; } on (release) { pressed = true; }
Jeg styrer så actions på selve clippet hvori knappen ligger således:
Dvs. ved rollOver skulle minMovie skifte farve til hvid og ellers have sin oprindelige farve. Det er her alt mystisk går igang...
Hvis minMovie bare har sin normale farve, så er den sort fra start. Hvis jeg tinter minMovie til en anden farve, så fungerer rollOver- og Out helt efter planen. Men uanset hvilke værdier for RGB jeg indsætter i funktionen combineRGB så skiftes der farve til sort!?
Dvs. det hele fungerer efter hensigten, bortset fra jeg er nødt til at tinte min movie, samt at combineRGB funktionen kun returnerer sort farve.
Hvis jeg indsætter værdier i combineRGB manuelt, dvs. uden om funktionen men blot benytter RGB variablen, så virker alt igen efter hensigten.
Det er egenligt ikke så meget en alternativ løsning jeg er ude efter, det bør nok kunne klares, men jeg vil meget gerne kunne se grunden til min fejl i dette script!?
red << 16 betyder 2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*red
derfor ender du med at red og green saturerer hvis de ikke er lig nul( de får den aller højeste værdi de kan opnå.) som vil ligne sort uanset hvad du har af værdi for blue.
Det kan jeg godt følge dig i, men jeg har taget eksemplet direkte fra AS - Definitive Guide - s.438 hvor Moock indsætter værdier i præcist denne function!? Derfor regnede jeg med det ville virke, men det gør det jo ikke...
Jeg tror dog stadig tanken med left shift er god nok, for hvis jeg skriver det som følgende:
var RGB = (201<<16) | (160<<8) |21;
farve = new Color(_root.mitClip);
farve.setRGB(RGB);
Så virker det fint nok og mitClip ændrer farve?! Jeg ved ikke lige hvordan jeg skal gribe det an?!
Farven er ikke sort fra start, den har en anden (gul) farve. Jeg har tintet den til en anden (grøn), tracet myColor og får 5439300... hvis jeg omdanner det til hex - med toString(16) eksemplet side 435 - får jeg så 52ff44 som output. Det er den rigtige farvekode for det grønne...
Det er ret strange det her, for det ser ud som om hans eksempel slet ikke virker?! Har du forsøgt med funktionen?
Nej, det har jeg desværre ikke. Der er ikke installeret Flash på dennne computer, men jeg vil afprøve det når jeg er hjemme og vende tilbage hvis jeg finder ud af noget. mvh geo
Jeg læser lige lidt op på det, og alt andet lige skriver han det er bedre at benytte get- og setTransform på color objektet når man relaterer til den oprindelige farve. Så jeg tror jeg benytter det istedet. Men det ER bare underligt funktionen ikke virker...
Det vil være great hvis du kan gennemskue fejlen på et andet tidspunkt - tak for nu :0)
Nu gør det mig egenligt ikke så meget længere. Jeg benyttede som sagt transform istedet, og det virker fint nu. Det irriterede mig bare grænseløst tidligere, fordi jeg havde forsøgt så mange muligheder.
Men ellers tak for hjælpen, hvis du stadig finder løsningen vil jeg da være meget glad for at høre det! Så jeg lader spørgsmålet stå åbent for muligheder :0)
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.