Volledige versie bekijken : Hoe alleen bij de roodwaarde te komen?
celaeno2
%Europe/Berlin %199 %2008, 05:47
Kan iemand mij uitleggen hoe je bijv een roodwaarde van een kleur variabel kan veranderen?
Dus niet:
var c = new Color(this);
c.setRGB(0xff0000);
Maar bijv:
for (i=0; i<100; i++) {
roodwaarde = i;
}
Met andere woorden: waar kan je apart de RGB waarden veranderen van een kleur
En nog iets: 0xffffff Waar staat de 0 voor, is dat het nummer van de kleur? Als ik type 1xffffff krijg ik een foutmelding..
Gerrit55
%Europe/Berlin %290 %2008, 07:58
0x zegt de compiler dat er een hexadecimaal getal volgt.
De 1e 2 digits zijn voor de roodwaarde, dus 0x01000 .. 0xff0000 = roodkanaal
Wil je meer met kleuren, kijk dan bij ColorTransform
mknol
%Europe/Berlin %376 %2008, 10:02
Ik heb hier ooit een functie voor geschreven
/**
* set red value to a color
* @param tint range between 0-255
* @param color color to edit
* @return
*/
public static function setRedToColor ( tint:uint = 255, color:uint ):uint
{
// restriction
if (tint < 0) { tint = 0 }
if (tint > 255) { tint = 255 }
return (tint << 16) | (color << 8) | color;
}Je kunt het zo gebruiken
var myColor:uint = 0xFFCC00;
for (var i:int = 0; i < 255; i++)
{
myColor= setRedToColor ( i , myColor );
}
celaeno2
%Europe/Berlin %706 %2008, 17:57
Sorry, ben even eigenwijs.. Maar weet je zeker dat dit werkt? Waar wordt dan daadwerkelijk de roodwaarde aangepast? Je zal toch in 0xRR0000 bij het RR gedeelte moeten komen? Of setrgb gebruiken?
En colotransform, zie ik wel om bijv een object in een movie van kleur te veranderen, wat ik wil is bijv.
for (i=0; i<100; i++) {
roodwaarde = i;
teken 100 lijnen of kubusjes met 100 verschillende kleuren van rood
En p.s. waar staat 0 voor in 0xffffff? Als ik 1xffffff type komt er een foutmelding
Bedankt voor de reacties :)
Jan
%Europe/Berlin %722 %2008, 18:21
for (var i:Number=0; i<255; i++)
{
red=i.toString(16);//verander i van decimale waarde naar hexadecimale (ipv 0 tot 255 gaat het dan van 0 tot ff)
if(red.length<2) red="0"+red;
drawLine(i,red);
}
function drawLine(i,redComponent)
{
rgb="0x"+redComponent+"0000";
this.lineStyle(1,rgb);
this.moveTo(0,i);
this.lineTo(Stage.width,i)
}
//geeft gradient van 0x000000 (zwart) tot 0xFF0000 ('puur' rood)
Die 0x geeft aan voor de computer dat hij het aankomende getal als hexadecimaal moet lezen.
decimaal: 0 1 2 3 4 5 6 7 8 9
hexadecimaal: 0 1 2 3 4 5 6 7 8 9 a b c d e f
In het decimaal stelsel kan je met 2 "plaatsen" maar 100 waardes schrijven: 00-99
In het hexadecimaal stelsel kan je met diezelfde 2 "plaatsen" 256 waardes schrijven: 00-ff
Bij computers bestaan kleuren uit 3 componenten: R G B (Red, Green, en Blue) en die kunnen elk een waarde van 0 tot ff hebben.
Groeten,
http://users.telenet.be/jansurf/cwo.png,Jan
mknol
%Europe/Berlin %917 %2008, 23:01
Het werkt wel wat ik poste, maar misschien heb je meer aan een tween engine die dit voor je doet:
Dit kun je ook bereiken met tweenlite:
http://blog.greensock.com/tweenfilterliteas3/
Zie ook het voorbeeld.
celaeno2
%Europe/Berlin %742 %2008, 18:48
Dit bedoelde ik wel een beetje:
for (var i:Number=0; i<255; i++)
{
red=i.toString(16);//verander i van decimale waarde naar hexadecimale (ipv 0 tot 255 gaat het dan van 0 tot ff)
drawLine(i,red);
}
function drawLine(i,redComponent)
{
rgb="0x"+redComponent+"0000";
this.lineStyle(1,rgb);
this.moveTo(0,i);
this.lineTo(Stage.width,i)
}
//geeft gradient van 0x000000 (zwart) tot 0xFF0000 ('puur' rood)
Groeten,
http://users.telenet.be/jansurf/cwo.png,Jan
Alleen nu werkt het volgende niet:
function rgb (r,g,b) {
rood=r.toString(16);
groen=g.toString(16);
blauw=b.toString(16);
kleur="0x"+rood+groen+blauw;
}
Het ging me dus eigenlijk om een functie die de rood, groen, blauw waarde verandert..
Maar als je met deze functie de roodwaarde verandert, verandert de groen waarde.. :S
en waarom moet het eerst naar een string geconverteerd worden? Waarom kan dit niet:
kleur = 0x + rood + groen + blauw;
En nog iets: hoe kan je de kleuren van de lijnen nu veranderen zonder ze opnieuw te tekenen? Kan dat?
Jan
%Europe/Berlin %764 %2008, 19:20
Maar als je met deze functie de roodwaarde verandert, verandert de groen waarde..
Dat komt omdat bijvoorbeeld 15 naar f geconverteerd wordt en niet naar 0f en dus schuift alles op zodat het lijkt alsof je groen verandert.
rgb(15,15,15) geeft 0xfff ipv 0x0f0f0f
check in je functie of de waardes wel 2 tekens lang zijn na de omzetting naar hexadecimaal:
function rgb (r,g,b)
{
rood=r.toString(16);
if(rood.length<2) rood="0"+rood;
groen=g.toString(16);
if(groen.length<2) groen="0"+groen;
blauw=b.toString(16);
if(blauw.length<2) blauw="0"+blauw;
kleur="0x"+rood+groen+blauw;
}
en waarom moet het eerst naar een string geconverteerd worden? Waarom kan dit niet:
kleur = 0x + rood + groen + blauw;
Het klopt niet helemaal maar stel dat rood 10 is en groen en blauw ook 10 dan krijg je bij jou: 0x30
Nee lijnen kan je niet van kleur veranderen zonder ze opnieuw te tekenen. Zoiets gaat enkel met MovieClips.
Groeten,
http://users.telenet.be/jansurf/cwo.png Jan
celaeno2
%Europe/Berlin %783 %2008, 19:48
Ok bedankt!
Klinkt inderdaad logisch allemaal :)
Nu kwam ik er trouwens achter dat dit ook volstaat:
function rgb (r,g,b) {
var c = new Color(this);
c.setTransform({rb:r, gb:g, bb:b});
return c;
}
En vroeg me af of je ook de grootte van je flashscherm kan bepalen in actionscript? Bijv iemand heeft als resolutie 800x600, de resolutie eerst kunnen opvragen en dan je flash scherm daar op aan passen.. Maar misschien kan dat beter in een ander topic..
celaeno2
%Europe/Berlin %158 %2008, 04:47
Ok bedankt! Klinkt innderdaad logisch allemaal :)
Ben wel bekend met Hexadecimalen, 10hex = 16
De rgb function werkt goed.
Kwam ook dit nog tegen:
function rgb (r,g,b) {
c = new Color(this);
c.setTransform({rb:r, gb:g, bb:b});
return c;
}
for (i=0; i<250; i++) {
this.lineStyle(1, rgb (i,0,0), 100);
line (0,i,550,i); // lijn functie
}
Hiemee krijgen alle voorgaande lijnen op het scherm de nieuwe kleur, dus kan je de kleur er mee veranderen zonder opnieuw te tekenen. Op het laatst staat er dus een felrode rechthoek. Zou het ook gebruikt kunnen worden om elke lijn een andere kleur te laten aannemen?
Jan
%Europe/Berlin %462 %2008, 12:06
Hiemee krijgen alle voorgaande lijnen op het scherm de nieuwe kleur, dus kan je de kleur er mee veranderen zonder opnieuw te tekenen. Op het laatst staat er dus een felrode rechthoek. Zou het ook gebruikt kunnen worden om elke lijn een andere kleur te laten aannemen?
Je kleurt gewoon "this" en deze krijgt in zijn geheel de laatste kleur en dan is rood 255. Niet zozeer alle lijnen krijgen een nieuwe kleur maar de movieclip this of _root krijgt een nieuwe kleur.
Color constructor
public Color(target: Object)
Creates a Color object for the movie clip specified by the target_mc parameter. You can then use the methods of that Color object to change the color of the entire target movie clip.
Als het je gewoon om die rgb functie gaat kan je eventueel een tijdelijke movieclip aanmaken en daarvan de rgb opvragen en ze daarna weer removen. Met het voorbeeld van hieronder krijg je dan wel een gradient.
function rgb (r,g,b) {
var tempMc:MovieClip=this.createEmptyMovieClip("tempMc",this.getNextHighestDepth());
c = new Color(tempMc);
c.setTransform({ra:100, rb:r, ga:100, gb:g, ba:100, bb:b});
return c.getRGB();
}
for (i=0; i<250; i++) {
this.lineStyle(1, rgb (i,0,0), 100);
this.moveTo(0,i);
this.lineTo(Stage.width,i)
tempMc.removeMovieClip();
}
Uiteindelijk komt het neer op mijn voorbeeld van een paar posts geleden.
Maar nog kan je daarmee achteraf niet 1 bepaalde lijn van kleur veranderen zonder ze opnieuw te tekenen. Een lijn heeft geen instance name en kan je dus niet aanspreken via actionscript en kan je dus ook geen nieuwe eigenschappen meegeven.
Je kan eventueel voor elke lijn die je nu tekent een aparte movieclip aanmaken en dan in die movieclip een lijn tekenen en dan kan je wel achteraf elke lijn een andere kleur geven door de kleur van de movieclip waar ze in zit te veranderen. Je hebt dan geen 255 'losse' lijnen maar 255 movieclips met elk 1 lijn in.
Groeten,
http://users.telenet.be/jansurf/cwo.png Jan
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.