#1 19.07.2011 13:56:55

Peter-Pascal
Member
Registriert: 26.02.2007
Beiträge: 63

Umwandeln von string in integer

Hallo,

klingt einfach, aber ich komme nicht drauf. Ich meine aber nicht die normale Umwandlung mi StrToInt bzw. IntToStr.

Sondern ich brauche eine Umwandlung von String nach TD3DFormat.  Von einer Combobox bekomme ich den ausgewählten String zum Beispiel: D3DFMT_R8G8B8. Der entspricht exakt einem Intege-Wert. Funktioniert die Umwandlung nur durch eine if-Abfrage?

Code: delphi

var
s : string;
i : integer;
begin
if s = 'D3DFMT_R8G8B8' then i := 20;
end;


Es sind ca. 50 Formate, das gibt eine sehr große Funktion zum Umwandeln, da hoffte ich, es gibt eine kürzere elgante Möglichkeit.

Gruß
Peter


Heute ist nicht alle Tage – ich komm wieder, keine Frage

Offline

 

#2 19.07.2011 15:21:07

DragonFlyOfGold
ProMember
Ort: Berlin
Registriert: 09.11.2005
Beiträge: 139

Re: Umwandeln von string in integer

So nach langen Suchen hab ich folgendes rausgefunden:

Mein erster Gedanke war RTTI. Darüber kann man sich den Namen von u.a. auch Enumarationen ausgeben lassen. Größtes Problem, es gibt nur TypenInfos für Enumerationen ohne Lücken

Code: delphi

   enumgut = (wert1, wert2, wert3); // dafür geht RTTI
   enumschlecht = (wert1, wert4 = 4, wert7 = 7); // geht nicht für RTTI


Falls du trotzdem eine Enumeration schreiben möchtest (der Code des Header, welche die TD3DFormate auflisten ist fast schon eine, fehlen nur ein paar Änderungen). Hier der Code um auf die Namen der Enumeratonselemente zuzugreifen:

Also habe ich etwas rumgesucht und gefunden, dass es ein kaum zu findene D3DUtil gibt, in der es eine fast passende Funktion vorhanden ist. Nach etwas suchen hab ich sie dann bei Cooltie gefunden. Hier der Code dazu:

Code: delphi

 uses TypInfo;
 ...
 type enumtest = (test1,test2 ,test3);
 ...
 writeln(getenumname(typeinfo(enumtest),1)); //gibt 'test1' aus

Code: delphi

function D3DUtil_D3DFormatToString(format: TD3DFormat; bWithPrefix: Boolean = True): PChar;
begin
  case format of
    d3dfmt_unknown:         result:= 'D3DFMT_UNKNOWN';
    d3dfmt_r8g8b8:          result:= 'D3DFMT_R8G8B8';
    d3dfmt_a8r8g8b8:        result:= 'D3DFMT_A8R8G8B8';
    d3dfmt_x8r8g8b8:        result:= 'D3DFMT_X8R8G8B8';
    d3dfmt_r5g6b5:          result:= 'D3DFMT_R5G6B5';
    d3dfmt_x1r5g5b5:        result:= 'D3DFMT_X1R5G5B5';
    d3dfmt_a1r5g5b5:        result:= 'D3DFMT_A1R5G5B5';
    d3dfmt_a4r4g4b4:        result:= 'D3DFMT_A4R4G4B4';
    d3dfmt_r3g3b2:          result:= 'D3DFMT_R3G3B2';
    d3dfmt_a8:              result:= 'D3DFMT_A8';
    d3dfmt_a8r3g3b2:        result:= 'D3DFMT_A8R3G3B2';
    d3dfmt_x4r4g4b4:        result:= 'D3DFMT_X4R4G4B4';
    d3dfmt_a2b10g10r10:     result:= 'D3DFMT_A2B10G10R10';
    d3dfmt_a8b8g8r8:        result:= 'D3DFMT_A8B8G8R8';
    d3dfmt_x8b8g8r8:        result:= 'D3DFMT_X8B8G8R8';
    d3dfmt_g16r16:          result:= 'D3DFMT_G16R16';
    d3dfmt_a2r10g10b10:     result:= 'D3DFMT_A2R10G10B10';
    d3dfmt_a16b16g16r16:    result:= 'D3DFMT_A16B16G16R16';
    d3dfmt_a8p8:            result:= 'D3DFMT_A8P8';
    d3dfmt_p8:              result:= 'D3DFMT_P8';
    d3dfmt_l8:              result:= 'D3DFMT_L8';
    d3dfmt_a8l8:            result:= 'D3DFMT_A8L8';
    d3dfmt_a4l4:            result:= 'D3DFMT_A4L4';
    d3dfmt_v8u8:            result:= 'D3DFMT_V8U8';
    d3dfmt_l6v5u5:          result:= 'D3DFMT_L6V5U5';
    d3dfmt_x8l8v8u8:        result:= 'D3DFMT_X8L8V8U8';
    d3dfmt_q8w8v8u8:        result:= 'D3DFMT_Q8W8V8U8';
    d3dfmt_v16u16:          result:= 'D3DFMT_V16U16';
    d3dfmt_a2w10v10u10:     result:= 'D3DFMT_A2W10V10U10';
    d3dfmt_uyvy:            result:= 'D3DFMT_UYVY';
    d3dfmt_yuy2:            result:= 'D3DFMT_YUY2';
    d3dfmt_dxt1:            result:= 'D3DFMT_DXT1';
    d3dfmt_dxt2:            result:= 'D3DFMT_DXT2';
    d3dfmt_dxt3:            result:= 'D3DFMT_DXT3';
    d3dfmt_dxt4:            result:= 'D3DFMT_DXT4';
    d3dfmt_dxt5:            result:= 'D3DFMT_DXT5';
    d3dfmt_d16_lockable:    result:= 'D3DFMT_D16_LOCKABLE';
    d3dfmt_d32:             result:= 'D3DFMT_D32';
    d3dfmt_d15s1:           result:= 'D3DFMT_D15S1';
    d3dfmt_d24s8:           result:= 'D3DFMT_D24S8';
    d3dfmt_d24x8:           result:= 'D3DFMT_D24X8';
    d3dfmt_d24x4s4:         result:= 'D3DFMT_D24X4S4';
    d3dfmt_d16:             result:= 'D3DFMT_D16';
    d3dfmt_l16:             result:= 'D3DFMT_L16';
    d3dfmt_vertexdata:      result:= 'D3DFMT_VERTEXDATA';
    d3dfmt_index16:         result:= 'D3DFMT_INDEX16';
    d3dfmt_index32:         result:= 'D3DFMT_INDEX32';
    d3dfmt_q16w16v16u16:    result:= 'D3DFMT_Q16W16V16U16';
    d3dfmt_multi2_argb8:    result:= 'D3DFMT_MULTI2_ARGB8';
    d3dfmt_r16f:            result:= 'D3DFMT_R16F';
    d3dfmt_g16r16f:         result:= 'D3DFMT_G16R16F';
    d3dfmt_a16b16g16r16f:   result:= 'D3DFMT_A16B16G16R16F';
    d3dfmt_r32f:            result:= 'D3DFMT_R32F';
    d3dfmt_g32r32f:         result:= 'D3DFMT_G32R32F';
    d3dfmt_a32b32g32r32f:   result:= 'D3DFMT_A32B32G32R32F';
    d3dfmt_cxv8u8:          result:= 'D3DFMT_CxV8U8';
  else
    result:= 'Unknown format';
  end;
  if (bwithprefix or (pos('D3DFMT_', result) = 0)) then {nothing}
  else result:= result + length('D3DFMT_');
end;


Ich weiß zwar das es die falsche "Richtung" der Umwandlung ist, aber damit lässt sich z.B. leicht eine Hashmap füllen in der du dann deinen String nachschlagen kannst.

Beitrag geändert von DragonFlyOfGold (19.07.2011 15:22:31)

Offline

 

#3 19.07.2011 16:48:44

Peter-Pascal
Member
Registriert: 26.02.2007
Beiträge: 63

Re: Umwandeln von string in integer

Hey DragonFlyOfGold,

vielen Dank.

Das ist kein Problem mit der falschen Richtung, nun weiß ich, dass es alles umfänglich geschrieben werden muss. Ich wollte mir nur nicht die Arbeit machen und 50 Zeilen schreiben, um später festzustellen mit etwas überlegen wäre es drei Zeilen gewesen. Und Deine Funktion kann ich ja so übernehmen.

Gibt es noch mehr Funktionen bei D3DUtil_ ??? Wo finde ich die Unit? Brauche immer mal etwas Inspiration.

Eine Frage noch, bist Du einer von den PixelSummoners?

Gruß Peter


Heute ist nicht alle Tage – ich komm wieder, keine Frage

Offline

 

#4 19.07.2011 17:23:44

DragonFlyOfGold
ProMember
Ort: Berlin
Registriert: 09.11.2005
Beiträge: 139

Re: Umwandeln von string in integer

Ja dort gibt es noch mehr Funktionen, keine Ahnung ob davon eine nützlich ist. Wusste bis heute nichtmal das es die gibt. Ich hab die Version aus der ich die Funktion habe mal anghängt.
Und zu deiner zweiten Frage: Ja ich bin einer der Pixelsummoners wink Deswegen der Link.

Grüße DfoG

Beitrag geändert von DragonFlyOfGold (19.07.2011 17:25:36)


Attachments:
Attachment Icon D3DUtil.pas, Größe: 71,581 bytes, Downloads: 552

Offline

 

#5 19.07.2011 19:59:40

Peter-Pascal
Member
Registriert: 26.02.2007
Beiträge: 63

Re: Umwandeln von string in integer

Vielen Dank, ich schau mir die Datei mal an.

Ich habe mir ein Spiel runtergeladen, das mit den Planeten, sieht richtig gut aus, hast du die Planeten oder besser Asteroiden selbst gemacht? Mit Blender?


Heute ist nicht alle Tage – ich komm wieder, keine Frage

Offline

 

#6 20.07.2011 12:28:39

DragonFlyOfGold
ProMember
Ort: Berlin
Registriert: 09.11.2005
Beiträge: 139

Re: Umwandeln von string in integer

Ja die sind selber gemacht, aber nicht Blender sondern 3DsMax. Aber recht billig, ich hab einfach ne Kugel genommen und ein Rauschfilter drauf angewendet. Sobald du das Spiel ausprobiert hast, würde ich mich sehr über Feedback freuen, dazu gibts auch nen eigenen Thread im Unterforum Projekte von DelphiDev.

Offline

 

#7 21.07.2011 11:26:38

Peter-Pascal
Member
Registriert: 26.02.2007
Beiträge: 63

Re: Umwandeln von string in integer

Mache ich und gebe Dir ein Feedback, aber ich habe offengestanden noch nicht ganz begriffen, was ich machen muss, finde ich aber raus. Bislang habe ich mich an Deiner / Eurer Graphik erfreut, und der Animation im Spiel.

Die Einfachheit der Herstellung der Asteroiden überrascht mich etwas: Einfach eine Kugel in unterchiedlicher Größe, Textur und Rauschfilter und prompt sieht es wie ein klobiger unförmiger Stein, oder?

Ich versuche mir ein Modeller zu schreiben, der kann bereits einiges, nur mir fehlt noch die Idee wie ich von algorithmischen Formen (Kugel, Kasten, Pyramide) die einzelnen Vertice geschickt verändern kann, so dass andere Formen raus werden, als Beispiel aus einem Kasten einen Hinkelstein. Oder aus einer Kugel in Ellipsenform einen Stein, Hinkelstein.

Gruß Peter

Ps.: eine Rechtschreibüberprüfung wäre nicht schlecht, dann gäbe es nicht immer so peinliche Texte


Heute ist nicht alle Tage – ich komm wieder, keine Frage

Offline

 

#8 23.07.2011 09:18:23

Gnietschow
ProMember
Ort: Berlin
Registriert: 20.06.2007
Beiträge: 237

Re: Umwandeln von string in integer

Das Spiel hat keinen Einzelspielerteil, da wir noch keine KI-Gegner eingebaut hatten. Du müsstest dir dann jemanden suchen gegen den du spielen kannst smile Mit Tab müsstest du dann auch das Scoreboard sehen, da könnt ihr dann sehen wer wen mehr abgeballert hat cool

Zitat:

Einfach eine Kugel in unterchiedlicher Größe, Textur und Rauschfilter und prompt sieht es wie ein klobiger unförmiger Stein, oder?

Das Mesh darunter ist so entstanden. Allerdings sieht er vor allem so rau und unförmig aus, da wir noch Normalmapping drauf haben. Dadurch wird er um einiges plastischer.

Zitat:

Ich versuche mir ein Modeller zu schreiben...

Modeller sind doch eine recht komplexe Software, die sehr aufwändig zu programmieren wird sobald man damit ein wenig mehr machen möchte. Ich denke mal da ist es einfacher bestehende Sachen zu nehmen, als das Rad neu zu erfinden.

MfGnietschow


Es gibt 10 Gruppen von Menschen - die die das Binärsystem verstehen und die anderen.  :-)
Vegetarier essen meinem Essen das Essen weg ;)
-------------------------------------------------------------------------------------------------------------------
Der Community-Hub für Videospiele: gameloop.io

Offline

 

#9 23.07.2011 10:42:08

Peter-Pascal
Member
Registriert: 26.02.2007
Beiträge: 63

Re: Umwandeln von string in integer

Hey Gnietschow, dann bist Du der andere PixelSummoners. Freut mich.

Du hast recht mit dem Modeller und auch wieder die Frage warum das Rad neu erfinden. Mittleweile weiß ich auch, auf was ich mich da eingelassen habe und wollte eigentlich auch gar nicht groß bekannt geben, was ich tue. Nur bei einigen Fragen von mir, muß man schon mal erwähnen wofür ich es brauche. Es wird noch richtig Zeit kosten, bin auch schon lange dran, mehre Ansätze, aber es macht Spaß und dann warum nicht, bis zur Rente habe ich noch Zeit und dann erst recht.

Außerdem spricht schon einiges dafür, auch wenn es nur ein ganz einfacher Modelle werden wird: Soviele gibt es nicht, einige sind richtig teuer und durch Blender bin ich nicht durchgefunden, trotz Buch. Ich habe selten sowas umständliches gesehen. Da kam eigentlich erst der Gedanke. Darüber hinaus, wenn man sich mit DirectX beschäftigen möchte und es kennenlernen möchte halte ich es für einen guten Weg.

Aber ich bin noch sehr auf Hilfe angewiesen, vieles ist mir noch unklar. Und da noch mal danke für eure Hilfe.

Gruß Peter


Heute ist nicht alle Tage – ich komm wieder, keine Frage

Offline

 

#10 23.07.2011 19:49:13

Gnietschow
ProMember
Ort: Berlin
Registriert: 20.06.2007
Beiträge: 237

Re: Umwandeln von string in integer

Zitat:

durch Blender bin ich nicht durchgefunden

Das Gefühl kenne ich, das Programm soll zwar intuitiv sein, aber ich komm bis heute noch nicht richtig damit klar roll

Zitat:

aber es macht Spaß und dann warum nicht

Das hast du auf jeden Fall Recht. Wenn es zum Lernen und Spaß haben ist, dann ist auch ein gutes Projekt.
Ich hab nur davon abgeraten, da viele eigentlich ein Spiel entwickeln wollen, aber sich so lange mit den Tools drumherum beschäftigen, dass sie damit niemals anfangen geschweige denn fertig bekommen smile

Zitat:

Aber ich bin noch sehr auf Hilfe angewiesen, vieles ist mir noch unklar

Einfach Fragen, das Forum hier ist in letzter Zeit eh viel zu ruhig gewesen ^^

Beitrag geändert von Gnietschow (23.07.2011 19:50:09)


Es gibt 10 Gruppen von Menschen - die die das Binärsystem verstehen und die anderen.  :-)
Vegetarier essen meinem Essen das Essen weg ;)
-------------------------------------------------------------------------------------------------------------------
Der Community-Hub für Videospiele: gameloop.io

Offline

 

#11 23.07.2011 21:48:35

DragonFlyOfGold
ProMember
Ort: Berlin
Registriert: 09.11.2005
Beiträge: 139

Re: Umwandeln von string in integer

Was die Entwickler sich bei Blender gedacht haben, ist mir völlig schleierhaft. Ich hab auch mal ein Tutorial angefangen und versucht mich auf Krampf mit dem Teil anzufreunden, ohne Erfolg. Wenn ich meine Modelle irgendwann mal in kommerzieller Software nutzen sollte, würde ich mir ehr ein Lizenz für z.B. 3DsMax kaufen, als Blender zu nutzen.
Aber genug über meine Abneigung gelabert, ich würde mich auch freuen, wenn du viele Fragen hier im Forum stellst. Schön das wieder mal etwas los ist.

Offline

 

#12 24.07.2011 11:30:31

Peter-Pascal
Member
Registriert: 26.02.2007
Beiträge: 63

Re: Umwandeln von string in integer

Vielen Dank für eure Hilfe, meine Fragen werden kommen, hoffentlich müßt ihr euch nicht über allzuviel dumme herumärgern.
Es ist mir vieles schleierhaft bei DirectX. Ich nehme mal an, weil es schließlich auch eine Vorgeschichte, bzw. sich entwickelt hat und dadurch Ballast mit geschleppt. Etwas was ich nicht verstehe: Filter für die Texturen kann ich beim laden einstellen und auch über SetSamplerState (gehört wohl in eine andere Rubrik)

Freut mich jedenfalls zu lesen, dass ich mit meinem Eindruck über Blender nicht allein stehe.

Ein Modeller zu schreiben, bedeutet auch DirectX kennenzulernen, es gibt hunderte von Schaltern, so kann ich mich damit auseinandersetzen und lerne über die Möglichkeiten hinzu. Beipspielsweise für das laden einer Textur. Natürlich kann ich den Pfad im Source angeben, aber komfortabler ist es einen Dialog zu schreiben, das das Laden ermöglicht. Natürlich auch mit mehr Arbeit verbunden.

Ein Spiel zu schreiben ist nicht unbedingt mein Ziel, offengestanden erfreue ich mich sehr an den graphischen Möglichkeiten bzw. die tollen Landschaften und Szenen. So wäre beispielsweise eine Szene Stonehenge darzustellen. Ansich recht einfach, ein paar Steine (Hinkelsteine) und ein Terrain mit Wasser. Wenn dann später noch ein paar Leute darum laufen, wäre das richtig toll...

Aber bis dahin noch jede Menge Fragen.

Gruß Peter


Heute ist nicht alle Tage – ich komm wieder, keine Frage

Offline

 

Brett Fußzeile

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson