Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Immagini speculari

    Salve ragazzi, ho iniziato a programmare un piccolo videogioco in Java, e mi sono trovato davanti a un problema.
    In una tipica impostazione di gioco in 2D risulta sempre necessario far muovere un personaggio, e in questo ci si trova davanti al problema delle animazioni.
    Ora, utilizzando un array di immagini come frame di un animazione è possibile animare il personaggio facilmente.Il dubbio mi è salito quando ho pensato a cosa sarebbe successo se l'utente avesse fatto "tornare indietro" il personaggio. Mi sarebbe servito un altro set di immagini completamente speculari (il che non mi sembra una scelta ottima) oppure di un modo di utilizzare il drawImage in modo da poter disegnare la stessa immagine in modo speculare (il che sarebbe anche molto più facile da programmare).
    Ho trovato questo metodo che disegna un immagine proprio come serve a me:

    codice:
     public void drawFlipped(Graphics graphics, int x, int y)
      {
        graphics.drawImage(image, image.getWidth(null)+x, y,x,image.getHeight(null)+y, 0,0,image.getWidth(null), image.getHeight(null),null);
      }
    Il fatto è che non ho la minima idea di come funzioni ma soprattutto, è consigliabile utilizzarlo per scopi di questo tipo? (mi ritroverei a doverlo richiamare moltissime volte durante l'esecuzione, ovvero tutte le volte in cui il personaggio è rivolto verso sinistra)


    Mi servirebbe un piccolo consiglio da uno smanettone un po' più esperto

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,459

    Moderazione

    Le domande su Java hanno una sezione dedicata, come da Regolamento.

    Ho spostato la discussione.

    Ricorda di formattare il codice sorgente usando il tag [CODE].
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Non ho esperienza diretta, ma ho notato che in fase di sviluppo si disegnano gli sprites per ogni possibile movimento e animazione.
    I giochi sono un classico esempio di programmazione in real time, dovresti cercare di tenere al minimo le elaborazioni in modo da non avere overhead non necessari.
    Tra avere qualche immagine in memoria in più e processare l'inversione dell'immagine secondo te cosa sarebbe meglio fare?
    ...

  4. #4
    Originariamente inviato da Caiodark
    Non ho esperienza diretta, ma ho notato che in fase di sviluppo si disegnano gli sprites per ogni possibile movimento e animazione.
    I giochi sono un classico esempio di programmazione in real time, dovresti cercare di tenere al minimo le elaborazioni in modo da non avere overhead non necessari.
    Tra avere qualche immagine in memoria in più e processare l'inversione dell'immagine secondo te cosa sarebbe meglio fare?
    Il fatto è che ho proprio questo dubbio in primis, non sono sicuro che sia così pesante questa inversione, dato che il metodo si limita a disegnare questa immagine speculata è possibile che non venga processata un inversione, ma che semplicemente sia disegnata con un metodo diverso, giocando con le coordinate dei singoli pixel, non so se rendo l'idea . Ovviamente è possibile (e rasenta il probabile) che io mi stia sbagliando perchè tutta questa idea è un puro parto della mia mente xD.

    @alka, perdonami, sono nabbo in futuro cercherò di far così

  5. #5
    Originariamente inviato da errantex2x2x
    Il fatto è che ho proprio questo dubbio in primis, non sono sicuro che sia così pesante questa inversione, dato che il metodo si limita a disegnare questa immagine speculata è possibile che non venga processata un inversione, ma che semplicemente sia disegnata con un metodo diverso, giocando con le coordinate dei singoli pixel, non so se rendo l'idea . Ovviamente è possibile (e rasenta il probabile) che io mi stia sbagliando perchè tutta questa idea è un puro parto della mia mente xD.

    @alka, perdonami, sono nabbo in futuro cercherò di far così
    L'inversione in sé non so, chiamare 5 volte funzioni come getWidth e getHeight sicuramente sì
    Se gli sprite hanno tutti la stessa dimensione ti conviene fissare come costanti le loro dimensioni ed evitare di ricalcolarle, soprattutto nelle funzioni di disegno che sono quelle che richiami più spesso.
    Tutti i dati e le operazioni di cui puoi conoscere in anticipo il risultato e sei sicuro che non cambino nel tempo vanno dichiarate come costanti, così risparmi tempo prezioso.
    Ci sono diversi override di drawimage, non ti conviene usare quelli che processano l'immagine più di quello che serve. Considera che molti piccoli aggiustamenti fanno la differenza tra un frame-rate buono, decente o insufficiente.
    ...

  6. #6
    Originariamente inviato da Caiodark
    L'inversione in sé non so, chiamare 5 volte funzioni come getWidth e getHeight sicuramente sì
    Se gli sprite hanno tutti la stessa dimensione ti conviene fissare come costanti le loro dimensioni ed evitare di ricalcolarle, soprattutto nelle funzioni di disegno che sono quelle che richiami più spesso.
    Tutti i dati e le operazioni di cui puoi conoscere in anticipo il risultato e sei sicuro che non cambino nel tempo vanno dichiarate come costanti, così risparmi tempo prezioso.
    Ci sono diversi override di drawimage, non ti conviene usare quelli che processano l'immagine più di quello che serve. Considera che molti piccoli aggiustamenti fanno la differenza tra un frame-rate buono, decente o insufficiente.
    ah beh, a questo punto farò così penso che opterò per creare da programma un altro vettore che contiene tutte le immagini speculari, che istanzierò chiamando un metodo simile a questo e passando le immagini originali.Grazie per l'aiuto

  7. #7
    Potresti fare una prova con entrambi i metodi, sia con gli sprites che con il metodo che disegna in modo speculare, utilizzando il currentTimeMillis per confrontare i tempi. Fai delle prove e verifica i tempi solo così ti potrai rendere conto di quale metodo sia effettivamente il migliore.
    Facci sapere!
    Heavy boots of lead
    Fills his victims full of dread
    Running as fast as they can
    Iron Man lives again!
    - Black Sabbath / Iron Man -

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.