Mit Sprite malen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

hectic

Sieger des IS Talentwettbewerb 2006

Betreff: Mit Sprite malen

BeitragSa, Feb 04, 2006 5:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Gibt es eine Möglichkeit mit einem Sprite oder anderem unter B3D auf dem Bildschirm zu malen wie beispielsweise mit DrawImage? Also das ein Sprite mehrmals auf dem Bildschirm zu sehen ist, ohne immer ein neuen Sprite erstellen zu müssen? Möchte nämlich Schriftzüge schreiben wie Level 01, Level 02 etc. dabei aber nicht auf Transparenz verzichten...
 

Ava

Gast

BeitragSa, Feb 04, 2006 6:38
Antworten mit Zitat
Hi Hectic! Smile

Was würde denn dagegeben sprechen, mehrere Sprites (für jedes Zeichen einen) zu verwenden ?? Du könntest Dir eine 3D-Text Routine schreiben, die für einen String eine Anordnung von Sprites mit entsprechender Textur erstellt (diese am besten noch an einen Pivot heftet und den Pivot zurückgibt, damit Du den gesamten Text einfach positionieren und auch wieder löschen kannst!). Eine noch schönere Methode wäre eigentlich, Du würdest anstatt Sprites ein Mesh erstellen, in diesem Mesh ein Quad oder Tri für jeden Buchstaben anlegen mit entsprechenden UV-Koordinaten, so dass ein ganz bestimmter Buchstabe auf diesem Quad / Tri erscheint (Du würdest in diesem Fall dann auch nur eine grosse Textur für alle Buchstaben verwenden, anstatt eine Texur pro Buchstabe!). Als dritte Idee könnte ich mir vorstellen, Du erstellst eine Textur, schreibst in sie Deinen kompletten Text und gibst sie dann einem (entsprechend skalierten) Sprite oder Quad-Mesh zu. Zu Deiner Fragestellung würde mir eventuell noch die Idee kommen, Du positionierst Deinen Buchstaben-Sprite, renderst die 3D-Welt, positionierst ihn dann um für den nächsten Buchstaben, renderst die 3D-Welt (ohne den Hintergrund zu löschen immer! - und alle anderen 3D-Objekte sollten versteckt sein!) usw. Diese Methode würde Deinem Wunsch nahe kommen, einen Sprite ähnlich DrawImage zu verwenden. Ich kann mir aber nicht vorstellen, dass dies besonders schnell ist, und überhaupt würde ich Dir persönlich die zweite Methode empfehlen. So würde ich diese Aufgabe für mich versuchen zu lösen. Smile

Lieben Gruss,
+ Ava +

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Feb 04, 2006 9:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Ava,.. Smile

Irgendwie habe ich eine Abneigung >200 Sprites zu erstellen, nur damit da ein bischen Text auf dem Bildschirm zu sehen ist, um es dann gleich wieder in die Tonne zu schmeissen... Hmmm... Mit fertig erstelltem text habe ich bereits beim Menü so gehandhabt. Der restliche Text sollte dynamisch sein, da es im Spiel auch einen Leveleditor gibt, wo die User dann eigene Levels laden können. Und diesen Text möchte ich dann beim Auswählen transparent haben, damit es mit dem übrigen Spieldesign passt...

Das mit den UV-Koordinaten klingt schonmal garnicht schlecht. Dann müsste ich die Texteingabe auf max. ~8 Zeichen pro Dateiname begrenzen, da dann jedes Mesch feste Anzahl an Triangles haben wird. Allerdings währe dann auch die Zeichenbreite fest. Was bei Buchstaben wie f, i, j, l nicht so schön aussehen würde...

Werde mal Dein letzten Vorschlag ausprobieren Embarassed Wenn es dann wirklich langsam sein sollte, kann ich immernoch die anderen Methoden austesten...

Da hab ich mir mit dem Leveleditor wieder mal was eingebrockt... Als ob es nicht schon schlimm genug sein wird den Usern die Funktionen beizubringen (da die Spielegrafik auf ein etwas eigenartigen Aufbau beruht) und das ganze auch noch Schick zu gestallten... Danke Dir für die Antwort. Hast mich auf jeden Fall weiter gebracht... Smile
 

Ava

Gast

BeitragSa, Feb 04, 2006 10:13
Antworten mit Zitat
Tz tz tz...

Du kannst doch aber auch ein Mesh direkt im Programm entsprechend Deiner Bedürfnisse erstellen, Du bist da doch nicht gebunden an ein festes 8-Letter-Mesh, dass Du Dir im voraus zurechtbastelst. Genauso kannst Du auch eine Textur direkt im Programm erstellen und sie mit einem Text versehen. Da hast Du zwei meiner Vorschläge sehr statisch aufgefasst, so wie sie von mir eigentlich nicht gedacht waren. Wink Wenn man das gut anstellt, kann man sich damit eine sehr flexible, schöne und schnelle Lösung schaffen. Smile
 

Schnuff

BeitragSa, Feb 04, 2006 11:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics3D X_Aufl,Y_Aufl,0,1

repeat


   UPDATEWorld
   ReenderWorld
   ; 2D-Befehle
  Flip
Until keyhit(1)

So in etwa?
Programmers dont die. They gosub without return...

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Feb 05, 2006 7:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@Schnuff, ich will ja nicht auf Transparenz verzichten, damit es mit dem übrigem Gamedesign passt. Somit kommen dann 2D-Befehle nicht so gut...

@Ava, habe mal ein kleinen Geschwindigkeitstest gemacht. Der Geschwindigkeitsfaktor zwischen einzeln positionierten Sprites und einem mit mehrfachem RenderWorld beträgt bei mir etwa 1:100... Das ist, wie Du bereits sagtest, nicht grad besonders schnell. Da ich aber für die Levelauswahl nicht besonders viel Speed brauche und die Spritesanzahl nicht mehr als 200 betragen wird, kann man dies mal verkraften...

Test:Code: [AUSKLAPPEN]
Graphics3D 800,600,32,1
SetBuffer BackBuffer()
ClsColor 56,56,80

camera=CreateCamera()
PositionEntity camera,0,0,-400
CameraClsMode camera,0,1

light=CreateLight()
RotateEntity light,60,0,0

sprite=CreateSprite()
ScaleSprite sprite,10,10
EntityAlpha sprite,.1

xp#=0
yp#=0
wk#=0


While Not KeyHit(1)
 wk=wk+1

 For q=0 To 199
  xp=Sin(q*(Sin(q)+7)+wk)*q
  yp=Cos(q*(Cos(q)+7)+wk)*q
  PositionEntity sprite,xp,yp,0
  RotateSprite sprite,wk*(100-q)/40
  RenderWorld
 Next

 ms=MilliSecs()
 td=ms-tt
 tt=ms
 Text 0,0,td+"ms ~"+1000/td+"fps"

 Flip 0
 Cls
Wend
End

Danke nochmal für die Hilfe...
www.bam-lee.de.vu

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group