Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Array di Texture
Forum - C# / VB.NET - Array di Texture

Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2032
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 0:03
Giovedì, 12/02/2009
Chiedo un piccolo aiuto su questo argomento.

avevo pensato per un game rpg di utilizzare degli sprites animati in 4 file da 32x48 pixel

ho creato per l'appunto una funzione
che mi tagliava una porzione da quell'immagine,
me la salvava temporaneamente sul disco e poi la caricavo al backbuffer.

mi chiedevo se conoscete qualche esempio migliore per caricare direttamente le texture in un array in memoria
anzichè caricarle una ad una provocando spreco di memoria.

quindi un immagine di 128 x 192 px
dovrei fare un array di texture e caricare ogni porzione da 32x48

poi in sueguito con un ciclo for recuperare il la giusta texture che serve dall'array,

conclusione
potreste gentilmente illustrarmi come rintagliare una porzione di immagine 32x32 e anzichè salvarla sul disco, inserirla in memoria in un array di texture.



PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:27
Giovedì, 12/02/2009
Uno degli overload di Draw espone anche un parametro Rectangle che indica la porzione di immagine da disegnare. Mi sembra di aver usato proprio questo overload per scrivere la classe GameObject, che trovi nei primi capitoli della sezione A del tutorial XNA sul mio sito.

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2032
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 9:13
Venerdì, 13/02/2009
uhm forse ho sbagliato io a spiegarmi oppure non ho capito bene

cmq avevo fatto una funzione
con 2 picturebox
nel 1° caricavo l'img
e poi dal sencondo le le andava a rintagliare 1 ad 1 in e salvando sul disco piccoli spezzoni di file.

ma poi me li dovevo ricaricare tutti

questo però lo sto sviluppando direttamente su Dx senza xna.

chiedevo uhm se era possibile creare un array di texture

tipo hai presente i classici array di stringhe?
man mano.

dim tes as new array
test.add("testo")

chiedevo se si poteva fare una cosa del genere con le texture cioè un array di texture
anzichè di stringa o di interi


perchè dovremme all'avvio già crearmi tutti gli array di tutte le texture dei pg.
esendo un game in multyplayer e meglio che carichi già tutte le risorse in memoria anzichè in secondo momento.


un esempio veloce di cosa vorrei fare

Codice sorgente - presumibilmente Delphi

  1. dim classnovice as array  (Questo array dovrebbe contere Texture anzichè stringhe)
  2.  
  3.  
  4. sprite.Begin()
  5.  
  6. 'funzione che va a sapere se il pg si muove
  7. 'e assegna la direzione corrente
  8.  
  9. dim pass as texture = passopg("novice")
  10.  
  11.  
  12. sprite.draw(pass)
  13.  
  14. sprite.end
  15.  
  16.  
  17.  
  18. private function passopg(ByVal Classe as string)
  19.  
  20. if Classe = "novice"
  21. if pgdirezione = 2 then
  22. return classenovice(2)
  23. end if
  24. end if
  25. end function
  26.  
  27. 'questa funzione dovrebbe far ritornare una texture gia caricata nell'array e stamparla direttamente a schermo




spero di essere stato abbastanza chiaro
forse c'è un altro medoto per farlo non saprei
ma spero che si possa fare.

Ultima modifica effettuata da Thejuster il 13/02/2009 alle 9:29


PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:36
Venerdì, 13/02/2009
Non esiste l'oggetto Array (è solo una classe statica e sigillata), quindi non puoi scrivere New Array. Non ha neanche senso chiedersi se si può creare un array di texture: perchè non si dovrebbe poterlo fare? C'è forse una regola che vieta di creare array di texture? Non mi sembra.
Codice sorgente - presumibilmente VB.NET

  1. Dim A As New List(Of Texture2D)
  2. A.Add(...)
  3. 'oppure
  4. Dim B As New Dictionary(Of String, Texture2D)
  5. B.Add("nome", ...)
  6. 'oppure
  7. Dim C(10) As Texture2D



Certo, poi, che c'è un altro metodo, ossia quello che ti avevo scritto nel post precedente, di cui trovi qui una versione semplificata:
http://msdn.microsoft.com/en-us/library/bb196419.aspx
SourceRectangle designa la parte di immagine da renderizzare.

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2032
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 17:32
Venerdì, 13/02/2009
Grazie mille totem per avermi illuminato,
cmq il codice funzionante e questo
per chi si ponesse la mia stessa questione

Codice sorgente - presumibilmente VB.NET

  1. dim pg1 as texture
  2.  
  3. Dim arrtex As New Generic.List(Of Texture)
  4. arrtex.Add(pg1)




grazie totem saluti :k:
quando torno da lavoro vedo se riesco ad usare quel medoto di xna.
sarebbe il top, senza che vada a tagliarmi un intero tiles di sprite.

Ultima modifica effettuata da Thejuster il 13/02/2009 alle 17:33


PM Quote