![]() |
Benutzerdefinierte Spritefarben
Hi,
Wusste leider keinen besseren Namen für meine Frage. Ich würde gerne Sprites haben die pratkisch von Natur aus komplett weiß sind (also schon mit schwarzen Konturen) und der Benutzer soll die Farben für einzelne Fläschen des Sprites selbst auswählen dürfen (z.B. aus einem Colordialog oder so). Wie macht man sowas? Ich würde dann die Andorra Engine benutzen. Gruß Neutral General |
Re: Benutzerdefinierte Spritefarben
Sind diese zu füllenden Flächen einfarbig oder Gradienten? Je nachdem musst du diese Farben im Original-Bitmap mit einer/m einzigartigen Farbe bzw. Farbbereich füllen, die/den du dann im Spiel einfach durch die wirkliche Farbe ersetzen kannst.
Ein Beispiel ist immer gut bei solchen Fragen ;) . Ich gebe mal ein Gegenbeispiel: Das Hemd des ![]() |
Re: Benutzerdefinierte Spritefarben
Mhh ja also das Prinzip ist mir schon so klar aber wie mach ich das in der Praxis? Also früher sind meine Versuche auf Sprites zu malen immer fehlgeschlagen...
|
Re: Benutzerdefinierte Spritefarben
Da du meinem Beispiel nicht widersprochen hast, werde ich dieses weiterführen: Das Mittel zum Ziel heißt wie immer in der Informatik Mathematik. Wir suchen ja nichts Anderes als eine Abbildung, eine Funktion, die einen (RGB-)Vektor auf einen anderen abbildet.
Da ich gerade festgestellt habe, dass die Clonkvorlage in blau ist :stupid: , wollen wir also den Bereich #0000ff...#000000 auf #rrggbb...#000000 abbilden. Soll heißen, der Benutzer wählt eine Farbe c, der Blauton im Originalbild gibt dann vor, in welcher Helligkeit diese Farbe eingefügt wird (256 mögliche Schattierungen). Die Farbe des Pixels mit dem originalen Blauwert x ist dann c * x / 255. |
Re: Benutzerdefinierte Spritefarben
Mhh jaaaa aber ich meine wie ich das praktisch programmiere.. Die Theorie bekomm ich denke ich mal auch hin aber wie färbe ich eine Fläche eines Sprites?
|
Re: Benutzerdefinierte Spritefarben
Unter DirectX holst du dir die Surface der Textur, von dieser kannst du dann einen Speicherbereich sperren lassen und beschreiben. Wie genau das zu programmieren ist, hängt natürlich von der API ab.
|
Re: Benutzerdefinierte Spritefarben
Ja wie gesagt ich wollte Andorra2D benutzen...
|
Re: Benutzerdefinierte Spritefarben
Wie wäre es mit...
Delphi-Quellcode:
Image.Color := clWasAuchImmer;
|
Re: Benutzerdefinierte Spritefarben
Liste der Anhänge anzeigen (Anzahl: 1)
Grml...
Schau(t) mal im Anhang.. Bei dem "Sprite" soll der Benutzer z.B. die Farbe der Hose bestimmen können und die Farbe des Pullovers und die Farbe des Motivs und die Hautfarbe,etc... @Igel.. Kann man in dem einen Spiel von dir nicht auch sowas einstellen? Gruß Neutral General |
Re: Benutzerdefinierte Spritefarben
Ja, das kann man. Du musst die Sprites halt "vorrendern". Ich habe das so gemacht:
Delphi-Quellcode:
//Produces the Image (with hair color etc...)
procedure TCharacter.ProduceImage; var x,y:integer; abmp:TBitmap; col,ncol:TColor; r,g,b:byte; //Makes a color daker function DarkColor(acolor:TColor;value:integer):TColor; var r,g,b:byte; begin r := cut(getrvalue(acolor)-value); g := cut(getgvalue(acolor)-value); b := cut(getbvalue(acolor)-value); result := rgb(r,g,b); end; begin //Create Bitmap abmp := TBitmap.Create; abmp.PixelFormat := pf24Bit; //Get the Oringinals Bitmap (TFigurImage) original.GetAsBitmap(abmp); { TODO -oAll -cCode : Scanline } for x := 0 to abmp.Width-1 do begin for y := 0 to abmp.Height-1 do begin col := abmp.Canvas.Pixels[x,y]; r := getrvalue(col); g := getgvalue(col); b := getbvalue(col); //Skin color. In the originals Bitmap the skin colors RGB Values are all the same --> gray/white if (r=g) and (r=b) then begin ncol := darkcolor(skincolor,255-r); abmp.Canvas.Pixels[x,y] := ncol; end; //Cloths color. In the originals Bitmap the clothes color is red (GB are not set) if (g=0) and (b=0) then begin ncol := darkcolor(clothescolor,255-r); abmp.Canvas.Pixels[x,y] := ncol; end; //Hair color. In the originals Bitmap the clothes color is yellow (B is not set) R and B is the same. if (b=0) and (r=g) then begin ncol := darkcolor(haircolor,255-r); abmp.Canvas.Pixels[x,y] := ncol; end; end; end; //Assing the new bitmap to the buffer figurimage.Assign(abmp); figurimage.transparentcolor := clFuchsia; figurimage.transparent := true; //Free all things abmp.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz