Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    incontro di immagini

    Salve a tutti... ho un pò di confusione in testa circa un giochino che sto provando a fare (giusto per conoscere java). Il game-ino è molto semplice... un astronave spara a mostricciattoli in movimento...
    ... il mio problema è come implementare un metodo che faccia si che il missile sparato, quando tocca il mostricciattolo, distrugga quest'ultimo.

    Riassumendo come posso far riconoscere all'Image missile l'incontro con l'Image mostro. So che è una cavolata ma è tutto il giorno che ci penso e non sò come fare.

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Devi controllare semplicemente le coordinate. Ti conviene gestire il mostriciattolo ed il missile in 2 oggetti separati. Per quanto riguarda allo scontro, c'è la classe Rectangle che mette a disposizione dei metodi che permettono di incrociare i dati passati in input.

    Feci un qualcosa di simile con il giochino Snake. In pratica il serpente sarebbe il tuo missile, ed il cibo sarebbe il piccolo mostro.

    Ti mostro due righe sperando di darti un input:



    codice:
    snake.getRectangle().intersects(frutto.getRectangle())
    intersects è presente in Rectangle.
    Come noti frutto chiama getRectangle() (è uguale al getRectangle() di snake)
    Eccolo:
    codice:
      Rectangle getRectangle() {
        return new Rectangle(x,y,img.getWidth(null), img.getHeight(null));
      }

    Il metodo ti restituisce true/false; true se il "serpente" mangia il frutto, false altrimenti.

  3. #3
    porca paletta... era davvero semplice ma non pensavo ad usare Rectangle()...
    Grazie grazie grazie e ancora grazie.

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Prego!

  5. #5
    Ho risolto la questione dello scontro-incontro di due immagini ma adesso mi è nato un altro problema... che probabilmente è banale come il precedente ma che non sò come risolvere.

    Vi mostro il metodo paintComponent:
    codice:
    //movimento astronave
    g2.drawImage(imgAstronave,(int)astronave.getAstroX(),(int)astronave.getAstroY(),null);
    
    //mostra mostro (ne ho messo solo uno per semplificare)
    g2.drawImage(listaMostri.get(0).getImgMostro(),xMostro,yMostro,null);
    
    for(Missile1 m : listaMissili)
    {
    	m.sparaMissile(g2);
    				
    	if(m.getRectangle().intersects(listaMostri.get(0).getRectangle()))
    	{
    	           listaMostri.remove(0);
                             //qua dovrei metterci un'animazione ma nascono errori
    	}
    }
    Il problema nasce quando il missile incontra il mostro. Se uso il metodo remove dall'ArrayList listaMostri mi vengono fuori una serie di errori interminabile...
    .........DOVE STO' SBAGLIANDO????????????

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Puoi postare gli errori?
    Di norma sono causati da chiamate ad oggetti non referenziati.

  7. #7
    questo è solo l'inizio degli errori... continua fino a quando non termino manualmente il programma.


    Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(Arr ayList.java:819)
    at java.util.ArrayList$Itr.next(ArrayList.java:791)
    at PannelloGiocoSpaziale1.paintComponent(PannelloGioc oSpaziale1.java:58)
    at javax.swing.JComponent.paint(JComponent.java:1054)
    at javax.swing.JComponent.paintToOffscreen(JComponent .java:5221)
    at javax.swing.RepaintManager$PaintManager.paintDoubl eBuffered(RepaintManager.java:1482)
    at javax.swing.RepaintManager$PaintManager.paint(Repa intManager.java:1413)
    at javax.swing.RepaintManager.paint(RepaintManager.ja va:1206)
    at javax.swing.JComponent._paintImmediately(JComponen t.java:5169)
    at javax.swing.JComponent.paintImmediately(JComponent .java:4980)
    at javax.swing.RepaintManager.paintDirtyRegions(Repai ntManager.java:770)
    at javax.swing.RepaintManager.paintDirtyRegions(Repai ntManager.java:728)
    at javax.swing.RepaintManager.prePaintDirtyRegions(Re paintManager.java:677)
    at javax.swing.RepaintManager.access$700(RepaintManag er.java:59)
    at javax.swing.RepaintManager$ProcessingRunnable.run( RepaintManager.java:1621)
    at java.awt.event.InvocationEvent.dispatch(Invocation Event.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.j ava:705)
    at java.awt.EventQueue.access$000(EventQueue.java:101 )
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPri vilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java: 675)
    at java.awt.EventDispatchThread.pumpOneEventForFilter s(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(E ventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:90)
    Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:604)
    at java.util.ArrayList.get(ArrayList.java:382)
    at PannelloGiocoSpaziale1.paintComponent(PannelloGioc oSpaziale1.java:62)
    at javax.swing.JComponent.paint(JComponent.java:1054)
    at javax.swing.JComponent.paintToOffscreen(JComponent .java:5221)
    at javax.swing.RepaintManager$PaintManager.paintDoubl eBuffered(RepaintManager.java:1482)
    at javax.swing.RepaintManager$PaintManager.paint(Repa intManager.java:1413)
    at javax.swing.RepaintManager.paint(RepaintManager.ja va:1206)
    at javax.swing.JComponent._paintImmediately(JComponen t.java:5169)
    at javax.swing.JComponent.paintImmediately(JComponent .java:4980)
    at javax.swing.RepaintManager.paintDirtyRegions(Repai ntManager.java:770)
    at javax.swing.RepaintManager.paintDirtyRegions(Repai ntManager.java:728)
    at javax.swing.RepaintManager.prePaintDirtyRegions(Re paintManager.java:677)
    at javax.swing.RepaintManager.access$700(RepaintManag er.java:59)
    at javax.swing.RepaintManager$ProcessingRunnable.run( RepaintManager.java:1621)
    at java.awt.event.InvocationEvent.dispatch(Invocation Event.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.j ava:705)
    at java.awt.EventQueue.access$000(EventQueue.java:101 )
    at java.awt.EventQueue$3.run(EventQueue.java:666)

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Prova a creare un blocco sincronizzato all'interno di run(). Purtroppo non sapendo come hai gestito i thread, non so bene come aiutarti.

    codice:
    synchronized(this) {
      // tuo codice
    }
    Ricorda comunque, in linea generale, che ogni qual volta hai un metodo che può essere acceduto da più thread contemporaneamente e compie un azione su un dato questo deve essere dichiarato synchronized (devi porre la parola davanti al metodo, come fai per il tipo di dato di ritorno).

  9. #9
    ahimè... non so usare i thread e non conosco la parola chiave synchronized se non per sentita nominare... mi metto allo studio dei thread... anche se ho come l'impressione (impressione, non di più) che il mio problema sia una questione di puntamento ad oggetti in un ArrayList vuoto.
    Spero d'aver ragione perchè sò che lo studio dei thread è un argomento piuttosto ostico...

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Viene lanciata se vi è una modifica di una Risorsa, mentre un altra parte la sta utilizzando.
    Guarda tu stesso, questa è la documentazione sull'eccezione che ti viene lanciata.

    http://docs.oracle.com/javase/7/docs...Exception.html


    Se manipolassi un oggetto nullo (quindi array list vuoto), avresti un NullPointerException. Comunque i thread per gestirne il movimento li dovrai utilizzare per forza di cose (ed anche per non "congelare" la grafica). ^^

    Comunque si, non è un argomento semplice...

    PS: Vector è sincronizzata, ti conviene utilizzare questa.

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.