Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-11-2004, 11:40   #1 (permalink)
Neuer User
 
Benutzerbild von Robse
 
Registriert seit: Oct 2004
Beiträge: 46
Dezimalwert in Farbe umwandeln?

Hi, ich will für mein Spiel eine "Gesundheitsanzeige" einbauen, so dass:

Bei 100% Gesundheit die Farbe Grün dargestellt wird
Bei 50% Gesundheit die Farbe Orange dargestellt wird
Bei 0% Gesundheit die Farbe Rot dargestellt wird

Und das ganze natürlich mit einem Verlauf für alle Werte dazwischen.
Habe mir dazu eine Funktion gebastelt:
Code:
function HealthColor(i)
{
	//i = i * ??
	HexCol = 0x00FF00;
	R = 0x040000;		//Rotanteil addieren
	G = 0x000200;		//Grünanteil subtrahieren
	return HexCol + (i * R)  - (i * G);
}
Aber die "Streckung" geht noch nicht von 0 bis 100, so bei 30% ist dann der rote Bereich bereits erreicht. Sobald ich i (Die Gesundheit) innerhalb der Funktion mit irgendwas multipliziere spinnt die Funktion nur noch rum. Wie muss ich die Funktion verändern um das hinzubekommen?
Robse ist offline   Mit Zitat antworten
Alt 08-11-2004, 12:22   #2 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Mach doch einfach ein Tweening ueber 100 Frames und benutze dann mcGesundheitsAnzeige.gotoAndStop( prozent) um die entsprechende Farbe anzuzeigen.

mfg. r
bokel ist offline   Mit Zitat antworten
Alt 08-11-2004, 12:48   #3 (permalink)
Neuer User
 
Registriert seit: Mar 2004
Ort: Hamburg
Beiträge: 99
oder benutze einfach eine wirklich rgb angabe (nicht in hex)

und dann gehst du davon aus, dass jede farbe einen wert zwischen 0 und 255 annehmen kann. dazu ein simpler dreisatz und anschließend wieder in hex umrechnen, fertig


edit:
public static function rgbToHex( r : Number, g : Number, b : Number ) : Number
{
return ( r << 16 ) | ( g << 8 ) | b;
}

Geändert von nesium (08-11-2004 um 13:19 Uhr)
nesium ist offline   Mit Zitat antworten
Alt 08-11-2004, 13:02   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
lege drei mc's übereinander (rot über orange über grün). die kannst du über _alpha ausblenden.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 08-11-2004, 13:17   #5 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Einen Dezimalwert kannst Du über
toString(16) in einen Hexadezimalwert umwandeln.

z.B.


ActionScript:
  1. a=2400 (Dezimal)
  2. b=a.toString(16);
  3. trace(b);
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 08-11-2004, 17:21   #6 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
... oder auf deine funktion von oben übertragen...
ActionScript:
  1. function HealthColor(i)
  2. {
  3.     r = Math.round(255 - i*2.55);
  4.     if(r<10)r="0"+r;
  5.     g = Math.round(i*2.55);
  6.     if(g<10)g="0"+g;
  7.     HexCol = "0x"+r.toString(16)+g.toString(16)+"00";
  8.     return HexCol;
  9. }
__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Alt 08-11-2004, 19:30   #7 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Na also. Im Team
sind wir stark
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 08-11-2004, 21:20   #8 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
hat sich da doch noch ein fehler eingeschlichen, besser ist:
ActionScript:
  1. function HealthColor(i)
  2. {
  3.     r = Math.round(255 - i*2.55).toString(16);
  4.     if(r.length<2)r="0"+r;
  5.     g = Math.round(i*2.55).toString(16);
  6.     if(g.length<2)g="0"+g;
  7.     HexCol = "0x"+r+g+"00";
  8.     return HexCol;
  9. }
__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Alt 09-11-2004, 10:48   #9 (permalink)
Neuer User
 
Benutzerbild von Robse
 
Registriert seit: Oct 2004
Beiträge: 46
Danke Leute ich werde mal mit .toString(16) rumexerimentieren!

Geändert von Robse (09-11-2004 um 10:50 Uhr)
Robse ist offline   Mit Zitat antworten
Alt 09-11-2004, 15:03   #10 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
und hier nochmal für ohne ".toString(16)"
ActionScript:
  1. function HealthColor(i)
  2. {
  3.     r = Math.round(255 - i*2.55);
  4.     g = Math.round(i*2.55);
  5.     b = 0;
  6.     HexCol = (r << 16 | g << 8 | b);
  7.     return HexCol;
  8. }
__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele