Commodore 64 > Aiuto & Domande

collisioni sprite/sprite

<< < (3/5) > >>

0scur0:

--- Citazione da: input - 09 Maggio 2021, 16:27:35 ---comunque adesso gli sprite si attaccano  correttamente, ma non si spostano piu, sono come incollati

--- Termina citazione ---
Attenzione: il registro 53278 viene aggiornato solo quando viene rilevata una collisione, cioè nel momento in cui gli sprites devono essere ridisegnati sullo schermo. In generale, questo avviene un certo intervallo di tempo dopo che ne viene aggiornata la posizione (che corrisponde, nel peggiore dei casi, a circa la durata di un intero quadro video, cioè 1/50 di secondo).
Occorre quindi essere sicuri che il contenuto del registro sia consistente con le nuove coordinate memorizzate (una soluzione semplice può essere introdurre un'attesa di almeno 1/50 di secondo tra la scrittura delle nuove coordinate e la lettura del registro).

input:
da ieri che ci sto provando, dopo i vostri consigli utilissimi, ho pensato ,  essendo il basic molto
lento ad eseguire tutte queste operazioni , pertanto non riesce a finire di svuotare il baffer del registro 53278  ( leggerne il contenuto per azzerarlo) che subito gia riscontra nuovamente un ulteriotre collissione e pertanto non ha il tempo materiiale di leggere il suo contenuto è  distaccarsi , quindi  rimane sempre attaccato.
ora con questa nuova e importante  info che gentilmente mi hai  inviato,  spero di poter risolvere il problema grazie :)

input:
ho provato ad inserire un ritardo un po piu alto di 1/50 s , con un ciclo for m= 1 to 50, il tempo che impiega lo schermo a ridisegnare tutto lo schermo.  pensavo che sarebbe  stato sufficiente. ma no va lo stesso,  ho provato vari valori  piu  e piu bassi ma senza alcun risultato. il ciclo lo inserito , subito dopo la scrittuira della nuova coordinata e prima   della lettura della locazione 53728, ma il risultato rimane invariato.
avevo provato con il joystick, ma rimane lo stesso problema , si muove in tutte le direzione, appena avviene lo scontro, si incolla e non si stacca piu.
 questo è uno stralcio. questo è uno stralcio di listato della parte  interessata del listato, dove sicuramente si annida il problema che non riesco ancora a  risolvere

17  print chr$(147)                     
40 POKEV+0,x                :REM coordinate  x  sprite 0
42 POKEV+1,y                :REM coordinate  Y  sprite 0
44 POKEV+4,xx               :REM coordinate  Y  sprite 2
46 POKEV+5,yy               :REM coordinate  Y  sprite 2

49  px=x              :REM posizione  x prima della collisione
50  py=y              :REM posizione  y prima della collisione

53 REM PUNTEGGIO
54 print "{home}",t,b

   
56  B=peek(v+30): REM lettura del rgistro 53278

59 REM CONTROLLO MOVIMENTO
69  geta$: ifa$=" " then  69
71  if a$=chr$(157) then x=x-5 :REM SINISTRA
80  if a$=CHR$(29 ) then x=x+5  : rem DESTA               IDEM
86  if a$=chr$(17)  then y=y+5  : REM GIU                 IDEM
95  if a$=CHR$(145) then y=Y-5  :REM SU                  IDEM


150 REM conserva il valore letto in B
157 print x
162 if B=5 then gosub 200 

164  form = 1 to 5 :nextm   :REM  ritardo
165  goto 40

200 print "collisione{home}"
250 REM POSIZIONI DELLO SPRITE 0  PRIMA DELLA COLLISIONE
260 REM  SCRITTURA NUOVE COORDINATE
280 x=px
281 y=py
282
297  t=t+1
300 return

0scur0:

--- Codice: ---200 print "collisione{home}"
250 REM POSIZIONI DELLO SPRITE 0  PRIMA DELLA COLLISIONE
260 REM  SCRITTURA NUOVE COORDINATE
280 x=px
281 y=py

--- Termina codice ---

Qui non stai scrivendo le nuove coordinate nei registri, stai semplicemente aggiornando delle variabili interne.


--- Citazione ---ho provato ad inserire un ritardo un po piu alto di 1/50 s , con un ciclo for m= 1 to 50, il tempo che impiega lo schermo a ridisegnare tutto lo schermo.
--- Termina citazione ---

Come fai ad esserne sicuro? Cerca qualcosa di più affidabile, ad esempio l'orologio di sistema (TI$).
Ribadisco l'utilità di prendere carta e penna.

Saluti

input:
credo che dovcra fare proprio cosi,  magari creando prima un diagramma di flusso e seguirlo psso passo

Navigazione

[0] Indice dei post

[#] Pagina successiva

[*] Pagina precedente

Vai alla versione completa