Sprite auf Sprite zeichnen

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
wolle212
Beiträge: 31
Registriert: 23.04.2005 21:39
Wohnort: Leipzig
Kontaktdaten:

Sprite auf Sprite zeichnen

Beitrag von wolle212 »

Ein Hallo und Dankeschön an alle Lesenden:

ich habe mal versucht, viele kleine quadratische Sprites auf ein großes rechteckiges zu schreiben. Jedoch ohne Erfolg.
Habe es mittels folgendem Codes-Schema versucht:

Code: Alles auswählen

StartDrawing(SpriteOutput(#sprite))
For x=0 to x_may
  For y=0 to y_max
    DisplaySprite(Feld(x,y),x*30,y*30)
  next
next
StopDrawing()
Das Ergebnis war dann, wenn ich das Sprite anzeigen lassen wollte, dass der Bildschirm schwarz blieb. Habe in der Hilfe nachgeschaut und mir so gedacht, dass man da wohl jetzt Images aufmalen muss. Doch das wäre insofern blöd, als dass ich dann die Bilder ja zweimal im Speicher hätte (jaja, kann das ja nach der Spriteherstellung löschen, aber es MUSS doch das was besseres geben ...)
Und immer über die For-Schleife das Bild auszugeben ist aus programmatischer Sicht auch nich gerade sehr elegant - aber so mach ich es im Moment.

Aber um auf meine Frage zurückzukommen: Wie mach nun da das so nicht geht ich aus vielen kleinen Sprites ein großes?
Es gibt 10 Arten von Menschen: Jene, die das Binärsystem verstehen und jene, bei denen das nicht der Fall ist.

PB_4.20
WinXP_Pro_x32_SP3
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

-Flippbuffers()?
-außerdem schreibt die PB-hilfe:
Hinweis: Sprites sollten nicht größer als der verwendete Bildschirmmodus sein. Das Verwenden größerer Sprites kann auf mancher Hardware funktionieren, auf anderer nicht. Besser ist das Aufsplitten des großen Sprites in mehrere kleine.
-falls du eine (große) map darstellen willst, ist es aus speichertechnischer sicht schon besser viele kleine sprites mehrmals darzustellen
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

#PB_Sprite_Texture schau dir das flag mal an ich glaube wen du sprites darüber erstellst dann müsste das mit den sprite3d befehlen gehen bin mir aber nicht sicher!
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
wolle212
Beiträge: 31
Registriert: 23.04.2005 21:39
Wohnort: Leipzig
Kontaktdaten:

Beitrag von wolle212 »

@#NULL:
Nein, FlipBuffers() ändert nichts daran; der ist nur für den Bildschirm da. Andere 2D-Malbefehle wie Box() funzen ja auch, nur DisplaySprite() nicht (wohl einfach deswegen, weil sich dabei nicht um einen solchen handelt). Muss wohl doch über die Image-Sache gehen ...

Und das generierte Sprite ist nicht so groß wie mein Bildschirmbereich, sondern max. genauso groß.

Nochmals vielen Dank für deine wirklich schnelle Hilfe :D

@roherter:
Werde mir das mal anschauen, dank gebührt auch dir :-)
Es gibt 10 Arten von Menschen: Jene, die das Binärsystem verstehen und jene, bei denen das nicht der Fall ist.

PB_4.20
WinXP_Pro_x32_SP3
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

also wenn ich das richtig verstanden hab willst du ein sprite auf ein sprite rendern, oder??? :lol:

naja egal, falls das zutrifft und du 4.0 hast machs doch mittels "UseBuffer(#Sprite)"

...
DIe Hilfe hat geschrieben:Ändert den standardmäßigen Rendering-Buffer (normalerweise der Bildschirm) auf das angegebene '#Sprite'. Dies bedeutet, dass alle folgenden DisplaySprite() ähnlichen Befehle auf dem '#Sprite' ausgegeben werden.

Um die Ausgabe wieder auf den Bildschirm-Buffer umzuleiten, benutzen Sie #PB_Default (= -1) als '#Sprite' Parameter.
Bild
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

hab mal geschaut. UseBuffer(#Sprite) ist das was du brauchst, und dann einfach DisplaySprite(). vor der haupt schleife aber wieder den buffer auf default (backbuffer) setzen:

Code: Alles auswählen

InitSprite()
InitMouse()
OpenScreen(1024,768,32,"fllscrn")

CreateSprite(0,32,32)
  StartDrawing( SpriteOutput(0) )
    Circle(15,15,10,$770000)
  StopDrawing()

CreateSprite(1,200,200)
  UseBuffer(1)
  For i=0 To 200/32
    For k=0 To 200/32
      DisplaySprite(0,i*32,k*32)
    Next
  Next

UseBuffer(-1)
Repeat
  ExamineMouse()
  DisplaySprite(0,10,10)
  DisplaySprite(1,100,100)
  FlipBuffers()
  ClearScreen(0)
  ;Delay(10)
Until MouseButton(2)
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
wolle212
Beiträge: 31
Registriert: 23.04.2005 21:39
Wohnort: Leipzig
Kontaktdaten:

Beitrag von wolle212 »

Jilocasin hat geschrieben:also wenn ich das richtig verstanden hab willst du ein sprite auf ein sprite rendern, oder??? :lol:
[...]
:twisted: Was gibt es denn da zu lachen!? :twisted:
Egal, ich danke euch allen aber trotzdem für die Lösung meines lächerlichen Problems ... :-)
Ihr seid echt spitze, Jungs :allright:
Es gibt 10 Arten von Menschen: Jene, die das Binärsystem verstehen und jene, bei denen das nicht der Fall ist.

PB_4.20
WinXP_Pro_x32_SP3
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@wolle

obwohl dein problem schon gelöst ist (sprite-darstellung ist nunmal kein Drawing-Vorgang ;) ) noch eine anmerkung:

falls du das für das softscrolling einer Tile-Map verwenden willst
(jedenfalls sieht mir deine schleife extrem nach einer tilemap aus)
dann mach es lieber per tile-auswahl und änderung der fein-koordinaten direkt auf den screen, als extra in ein sprite.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
wolle212
Beiträge: 31
Registriert: 23.04.2005 21:39
Wohnort: Leipzig
Kontaktdaten:

Beitrag von wolle212 »

Also es handelt sich nicht um eine große Karte, sondern bloß um ein maximal bildschirmgroßes Sprite.
An etwas Scrollbares habe ich zwar gedacht, jedoch mich noch nicht rangetraut, von daher erübrigt sich das.

Der Grund warum ich es auf ein Sprite zeichnen will, ist der, dass sich der angezeigte Hintergrund nicht ändert. Also wird nur einmal ein großes Sprite geschaffen, anschließend wird es als ClearScreen-Äquivalent benutzt.
Es gibt 10 Arten von Menschen: Jene, die das Binärsystem verstehen und jene, bei denen das nicht der Fall ist.

PB_4.20
WinXP_Pro_x32_SP3
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ok, in dem fall hast du natürlich nen gewaltige performance-gewinn. :allright:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten