Seite 1 von 3

createsprite und #pb_any fehler

Verfasst: 29.07.2008 09:32
von Brügge
hiho!

wenn ich ein sprite erstelle und als ersten parameter #pb_any angebe,

dann bekomm ich ja die sprite nummer zurück...
wenn ich die jetzt ausgebe dann erhalte ich einen wert der über 1000000 ist.

wenn ich jetzt das sprite mit der gleichen nummer nutzen möchte
(wieder createsprite()) dann gibt der compiler mir einen fehler aus:

#sprite object number is very high (over 1000000), are You sure of that ?

hier nochmal der code:

Code: Alles auswählen

initsprite()
if openwindow(0,0,0,300,300,"test")
  openwindowedscreen(windowid(0),0,0,300,300,1,0,0)

  sprite = createsprite(#pb_any,64,64)
  debug sprite

  createsprite(sprite,100,100)
  closewindow(0)
endif
vielen dank!

Verfasst: 29.07.2008 09:34
von edel
Die Nummer ist nicht "sprite" sondern "0"

Verfasst: 29.07.2008 09:36
von Brügge
oh sorry hab mich vertan.... bei mir steht das mit #pb_any...

ich änder das oben um

Verfasst: 29.07.2008 09:52
von edel
Ne, bei pb_any bekommst du einen Speicherblock zurueck, der sich so nicht
wieder verwenden laesst. Also freigeben, und dann nochmal mit
createsprite(#pb_any neu erstellen.

Verfasst: 29.07.2008 09:55
von Brügge
also wenn ich das so mache:

Code: Alles auswählen


initsprite() 
if openwindow(0,0,0,300,300,"test") 
  openwindowedscreen(windowid(0),0,0,300,300,1,0,0) 

  sprite = createsprite(#pb_any,64,64) 
  debug sprite 
  freesprite(sprite)
  createsprite(sprite,100,100) 
  closewindow(0) 
endif 




dann funzt das auch nicht...

oder habe ich das jetzt falsch verstanden?

Verfasst: 29.07.2008 09:56
von STARGÅTE
da irrst du aber edel:
Wenn #PB_Any als '#Sprite' Parameter verwendet wird, dann wird die Nummer des neuen Sprites als 'Ergebnis' zurückgegeben.
es ist also in der Tat die SpriteNummer, aber diese sollte auch nur zum weitere benutzen verwendet werde, und nicht zum erstellen einen neuen Sprites mit der gleichen Nummer, das ist "unlogisch".

Verfasst: 29.07.2008 09:58
von Danilo
Brügge hat geschrieben:also wenn ich das so mache:

Code: Alles auswählen


initsprite() 
if openwindow(0,0,0,300,300,"test") 
  openwindowedscreen(windowid(0),0,0,300,300,1,0,0) 

  sprite = createsprite(#pb_any,64,64) 
  debug sprite 
  freesprite(sprite)
  createsprite(sprite,100,100) 
  closewindow(0) 
endif 




dann funzt das auch nicht...

oder habe ich das jetzt falsch verstanden?
Beim neuen Sprite wieder:

Code: Alles auswählen

sprite = createsprite(#PB_Any,100,100)

Verfasst: 29.07.2008 10:01
von Brügge
@ stargate

es ist also in der Tat die SpriteNummer, aber diese sollte auch nur zum weitere benutzen verwendet werde, und nicht zum erstellen einen neuen Sprites mit der gleichen Nummer, das ist "unlogisch".


ne ist es nicht...
ich schreibe gerade ein kleines tool, das ein sprite3d clippen soll. an sich ganz easy...

es wird ein neues sprite mit der entsprechenen größe erstellt werden, dann mit usebuffer soll das alte sprite(geclippet) draufgezeichnet werden und dann wird das sprite3d neu erstellt (mit dem neuen sprite)...

ich möchte jetzt nicht bei jedem aufruf ein neues sprite nutzen...

deshalb wird bei dem gleichen sprite3d wieder das gleiche sprite benutzt...

Verfasst: 29.07.2008 10:02
von edel
Da hab ich mich wohl etwas falsch ausgedrueckt, mir ist sehr wohl bewusst
was #pb_any macht, diese "nummer" kann ich aber nicht nocheinmal bei
dem erstellen eines objektes nutzen, es wuerde zumindest ueberhaupt
keinen Sinn machen und massiv Speicher verschleudern.

Verfasst: 29.07.2008 10:05
von Brügge
@Danilo

hi das macht keinen unterschied (dort schmiert der mir schon ab)

@edel

wieso speicher verschleudern? (ist doch ehr wehniger speicher)