Ready64 Forum
Commodore 64 => Aiuto & Domande => Topic aperto da: input - 06 Marzo 2021, 16:25:36
-
salve ragazzi, qualcuno puo spiegarmi i tasti assegnati per lo spostamento dello sprite non funzionano: volevo solo far spostare lo sprire in direzione orizzontale grazie, questo e il listato:
10 V=53248: x=100
11 POKEV+21,1
12 POKE2040,13
20 FOR N=0 TO 62: READ Q: POKE832+N,Q: NEXT
30 pokev+0,X
40 pokev+1,X
50 geta$: IFA$="" THEN 50
55 IF A$="D" x=x+1
58 IF A$="S" x=x-1
60 GOTO 30
200 data 0,127,0,1,255,192,3,255,224,3,231,224
210 data 7,217,240,7,223,240,7,217,240,3,231,224
220 data 3,255,224,3,255,224,2,255,160,1,127,64
230 data 1,62,64,0,15,128,0,156,128,0,73,0,0,73,0
240 data 0,62,0,0,62,0,0,62,0,0,28,0 :dho:
-
Ragazzi grazie comunque, sono riuscito a risolvere il problema , nel listato che ho postato prima avevo dimenticato di inserire i then nelle righe delle coordinate x e y , ma non per questo non funzionava.
la causa è che il comando get con gli sprite le lettere maiuscole non hanno nessun effetto, ho causalmente inserire quelle minuscole e tutto funziona, non so il perche. se qualcuno sa spiegarmelo le sarei molto grato . posto il listato funzionante
10 V=53248: x=100
11 POKEV+21,1
12 POKE2040,13
20 FOR N=0 TO 62: readQ: POKE832+n,q: NEXT
30 pokev+0,x
40 pokev+1,100
50 GETA$: IFA$="" THEN 50
52 if a$="s" then x=x-1
54 if a$="d"then x=x+1
55 poke 650,128
60 goto 30
200 data 0,127,0,1,255,192,3,255,224,3,231,224
210 data 7,217,240,7,223,240,7,217,240,3,231,224
220 data 3,255,224,3,255,224,2,255,160,1,127,64
230 data 1,62,64,0,15,128,0,156,128,0,73,0,0,73,0
240 data 0,62,0,0,62,0,0,62,0,0,28,0
-
Non li ho provati ma ad occhio entrambi i programmi dovrebbero funzionare allo scopo.
Però, vedo che nel secondo hai attivato l'autorepeat con POKE 650,128; in questa modalità, viene sparato nel keybuffer il carattere del tasto premuto finché quel tasto non viene rilasciato, mentre nel primo caso no. L'effetto a video è che nel secondo programma lo sprite si muove fino al rilascio del tasto S o D.
Nel primo programma invece, il buffer viene riempito solo alla prima pressione del tasto, per cui lo sprite si muove di un solo pixel ad ogni pressione del tasto S o D (ecco perché ti sembra che il primo programma non funzioni).
-
hai ragione, ho riprovato è tutto ok :ciauz:
-
ciao a tutti. eccomi di nuovo qua ragazzi, da 2 giorni che sto provando a far muovere il mio sprite oltre la posizione 256, con il ciclo riesco a farlo, ma con il controllo dei tasti, non ne vengo a capo, qualcuno puo delucidarmi, ho darmi la soluzione grazie tantissimo questo è il mio programma che non riesco a far funziona. grazie anticipatamente
10 V=53248: x=200
11 POKEV+21,1
12 POKE2040,13
20 FOR N=0 TO 62: readQ: POKE832+n,q: NEXT
30 pokev+0,x
40 pokev+1,100
50 GETA$: IFA$="" THEN 50
52 if a$="s" then x=x-1
54 if a$="d"then x=x+1
55 if X=>255 then goto 80
56 poke 650,128
58 goto 30
80 pokev+16,0
90 pokev+0,x
102 pokev+16,1
110 goto 30
130 data 0,127,0,1,255,192,3,255,224,3,231,224
140 data 7,217,240,7,223,240,7,217,240,3,231,224 :dho:
150 data 3,255,224,3,255,224,2,255,160,1,127,64
160 data 1,62,64,0,15,128,0,156,128,0,73,0,0,73,0
170 data 0,62,0,0,62,0,0,62,0,0,28,0
-
Hai già un thread e non cambi argomento, thread unito.
Sono sbagliati l'ordine delle istruzioni e la destinazione del goto alla linea 55, inoltre manca una POKE: segui bene il flusso di esecuzione e te ne accorgerai.
-
sono riuscito ad andare oltre i 255, cioe raggiungere il bordo destro , ma quando torno indietro a circa 3/4 di schermo mi da errore illegal quantita error in 30 , ho provato di tutto di quello che so , ma non ci riesco, :facepalm:
-
scusa ho dimenticato di inserire le modifiche
questo e il nuovo listato senza i data
1 rem INIZIALIZZAZIONE
10 V=53248: x=21
11 POKEV+21,1
12 POKE2040,13
20 FOR N=0 TO 62: readQ: POKE832+n,q: NEXT
30 pokev+0,x
40 pokev+1,100
45 rem GESTIONE TASIERA
46 GETA$: IFA$="" THEN 46
47 if a$="s" then x=x-5
49 if a$="d"then x=x+5
51 if X=>255 then goto 70
53 poke 650,128
55 goto 30
57 rem MUOVI OLTRE 255
70 pokev+16,0 :x=0
75 pokev+1,x
85 pokev+16,1
90 goto 45
-
Se mi posso permettere, se vuoi imparare davvero scrivi meno codice possibile e soprattutto, rifletti a fondo sul significato di ogni riga di codice che scrivi. Ad esempio, che senso ha saltare ad una riga che contiene un commento (REM)? Ancora, perché impostare due volte di seguito un registro utente (53264)?
-
consiglio molto utile per chi sa programmare. ma per chi non ha le idee molto chiare non si rende conto , per questo chiedo aiuto per imparare, i consiglio sono sempre bene accetti perche costruiscono .
Mentre quanto riguarda il primo salto è stato un errore involontario, dovevo puntare alla riga successiva del programma .
invece Per quando riguarda i due 53264 per quello che ho capito il primo (70 pokev+16,0) abilita lo spostamento dello sprite in senso orizzontale da 256 a 320,
invece il secondo (85 pokev+16,1) so che fa in modo che il disegno puo iniziare di nuovo a spostarsi dal margine sinistro dello schermo .
ora non so se queste informazioni li ho capito male , ho li ho impostati male.
-
per chi non ha le idee molto chiare non si rende conto
Il punto è proprio "rendersi conto" di come funzionano i registri del calcolatore e di come questi interagiscono tra di loro; arrivati a quel punto, si può pensare a come utilizzarli per far fare alla macchina ciò che si vuole.
Per quando riguarda i due 53264 per quello che ho capito il primo (70 pokev+16,0) abilita lo spostamento dello sprite in senso orizzontale da 256 a 320,
invece il secondo (85 pokev+16,1) so che fa in modo che il disegno puo iniziare di nuovo a spostarsi dal margine sinistro dello schermo .
ora non so se queste informazioni li ho capito male , ho li ho impostati male.
Non so da dove hai preso queste informazioni ma evidentemente non hai compreso come funziona quel registro; ma a parte questo, la tua risposta alla mia seconda domanda mi fa capire che devi innanzitutto acquisire la giusta mentalità.
Come fare? Non per niente, questo sito è pieno zeppo di riviste e manuali. Il mio consiglio è: se vuoi imparare davvero, usali :)
-
- puo anche essere che non ho capito come funziona. la fonte è il manuale per l utente pag.76
- lo so che questo sito è pieno zeppo molte cose utili, ho imparate molto da questo sito,
ma quello che al momento mi serve non c'e
- se ero bravo come voi non avrei chiesto aiuto, perche avrei capito da solo
- solo richiami è osservazioni che sto sbagliando, ma nessun aiuto su come si risolve il problema
- se in questo sito chiedere aiuto e come essere sottoposto ad un processo preferisco non chiedere piu nulla
grazie lo stesso , buona giornata.
-
Non ti offendere, ma il fatto è che a guardare il tuo codice si capisce che stai proprio sbagliando la logica di ciò che deve essere fatto, e non (soltanto) il modo di farlo. Se ogni minimo problema è occasione di una nuova domanda, "aiutarti a farlo" rischia di tradursi in "farlo al posto tuo". Se si arriva a questo punto, decisamente non va bene, è una mancanza di rispetto del tempo di chi ti aiuta, e il motivo per cui le risposte ti possono sembrare stizzite.
A un certo punto reimposti x a 0, perché? Cosa succede quando provi a spostare nuovamente lo sprite a sinistra dopo averlo fatto? Non è meglio se gestisci la "tua" variabile di dove deve stare lo sprite separatamente rispetto a come sono impostati i registri del VIC?
Quando vedi un illegal quantity, chiedi il list della riga dell'errore e fai il print delle variabili che possono essere la causa dell'illegal quantity? Magari se lo fai capisci anche da solo il problema.
-
grazie , ci provero. la mia risposta non era una polemica .
-
per chi fosse interessato questo è il codice completo, è funzionante, grazie a eregil e OscurO
1 rem INIZIALIZZAZIONE
10 V=53248: x=21
11 POKEV+21,1
12 POKE2040,13
20 FOR N=0 TO 62: readQ: POKE832+n,q: NEXT
30 pokev+0,x
40 pokev+1,100
45 rem GESTIONE TASIERA
46 GETA$: IFA$="" THEN 46
47 if a$="s" then x=x-5
49 if a$="d"then x=x+5
51 pokev,x AND 255: pokev+16,ABS(X>255)
53 poke 650,128
55 goto 46
56 rem DATA
200 data 0,127,0,1,255,192,3,255,224,3,231,224
210 data 7,217,240,7,223,240,7,217,240,3,231,224
220 data 3,255,224,3,255,224,2,255,160,1,127,64
230 data 1,62,64,0,15,128,0,156,128,0,73,0,0,73,0
240 data 0,62,0,0,62,0,0,62,0,0,28,0