Título: Una de SPRITES Publicado por: x1pepe en 15 de Enero de 2006, 12:52:29 pm Tengo la pretensión de visualizar un SPRITE en la pantalla. He realizado el diseño con TinySprite http://jannone.org/msx/tinysprite.html,de los cuatro SLOTS disponibles, he utilizado en mi dibujo el nº3 y nº4, luego he exportado en BASIC y el resultado lo he copiado al programa de prueba en BASIC. No me da ningun error pero no se ve nada en la pantalla sólo el fondo azul.
Código: 10 SCREEN 2,0 20 FOR I=1 TO 32 30 READ A$ 40 A=VAL("&H"+A$) 50 S$=S$+CHR$(A) 60 NEXT I 70 SPRITE$(1)=S$ 80 PUT SPRITE1, (128,96),1,1 90 GOTO 90 100 REM COLOR 1 110 DATA ... 120 REM COLOR 8 130 DATA ... 140 REM COLOR 13 150 DATA (no he incluído los datas) Llevo un buen rato haciendo todo tipo de combinaciones raras cmptr:) y no doy con el fallo. Me podéis dar una ayudita? Título: Re: Una de SPRITES Publicado por: pitpan en 15 de Enero de 2006, 01:17:58 pm Hay un problema de partida básico: al hacer SCREEN 2,0 indicas que los sprites sean de 8x8 y, sin embargo, estás copiando 32 bytes, por lo que entiendo que definiste un sprite de 16x16. Prueba a usar SCREEN 2,2 para indicar sprites de 16x16.
Además, te recomiendo que copies los datos a VRAM con VPOKE en lugar de usar la chapuza de las cadenas de caracteres y el comando SPRITE$(n). Simplemente, tendrías que sustituir el código por Código: 10 SCREEN 2,2 20 FOR I=0 TO 31 30 READ A$ 40 A=VAL("&h"+A$) 50 VPOKE 14336+I,A 60 NEXT 70 PUT SPRITE 0,(128,96),1,0 80 GOTO 80 90 DATA .... Como verás, he movido los índices para que empieces con el patrón de sprites número 0. Si los DATAs están bien, no tendrás ningún problema. De todos modos, plantéate pasarte al ensamblador tan pronto como puedas :) Título: Re: Una de SPRITES Publicado por: Darth_Fistro en 15 de Enero de 2006, 01:34:14 pm Edu siempre tan duro con los usuarios de basic ;D En cuanto huele a lenguaje de alto nivel ya te quiere pasar al lado oscuro ;D
x1pepe,pienso que si eres capaz de esbozar un algoritmo con cierta tranquilidad, igual te viene mejor pasar directamente al basic. El hacer gráficos y sonido ya es cuestión de aprenderse tablitas y cómo funciona el vdp y demás, pero teniendo los fundamentos, eso es cuestión de documentación. Ahora, si no tienes ni papa de programar, entonces veo el asm muy "heavy" para los comienzos. Como bien te ha dicho Robsy, a partir de 14336 comienza la tabla de sprites tanto en screen 1 como en 2. Si son sprites de 8x8 (con el comando screen ,0) el sprite 0 estará en 14336, el 1 en 14344 y así de 8 en 8. Si es de 16x16 (con screen ,2), ocupará cada uno 32 bytes y por tanto en 14336 el número 0, en 14368, etc. Tienes hasta la 16383, o sea que si usas sprites de 8x8 podrías meter hasta 256, y 64 en caso de usar sprites de 16x16 (ocupa cuatro veces los de 8x8). Y sigue la recomendación de escribir en vram directamente con el comando vpoke. for i=1 to "número de sprites x8 o x32 según el caso" read a vpoke i,a next Sencillito y directo. ;) Título: Re: Una de SPRITES Publicado por: x1pepe en 15 de Enero de 2006, 04:48:45 pm Muchas gracias por el ejemplo Robsy
Citar De todos modos, plantéate pasarte al ensamblador tan pronto como puedas , lo reconozco, el ASM es mucho más rápido y explota más el MSX, pero pienso que el BASIC es un buen comienzo para hacer un primer juego.Citar Edu siempre tan duro con los usuarios de basic Grin En cuanto huele a lenguaje de alto nivel ya te quiere pasar al lado oscuro Grin Teneis razón, si salgo bién de ésta, puede que el próximo sea en ASM ;)El caso es que la cosa sigue sin ir. Quiza debería haber puesto el código entero, allá va: Código: 10 SCREEN 2,2 20 FOR I=0 TO 15 30 READ A$ 40 A=VAL("&h"+A$) 50 VPOKE 14336+I,A 60 NEXT 70 PUT SPRITE 0,(128,96),1,0 80 GOTO 80 90 DATA &HC0, &H60, &H38, &H0C, &H06, &H03, &H01, &H01, &H03, &H06, &H0C, &H18, &H30, &H60, &H40, &HC0, &H01, &H03, &H06, &H1C, &H30, &H60, &HC0, &H80, &HC0, &H60, &H30, &H10, &H18, &H0C, &H06, &H03 el dibujo es un X de color rojo. Los data deberían de estar bien, por lo menos los he pegado aquí directamente, pero en mi MSX no funciona. Gracias de nuevo :-[ Título: Re: Una de SPRITES Publicado por: pitpan en 15 de Enero de 2006, 04:58:35 pm Pues no me extraña que no te funcione ;)
Estás tratando de cargar como sprites datos con la forma &h&h00, con lo cual el pobre MSX se hace un lío. Lo del VAL y el "&h" está muy bien cuando los datos los pones en los DATAs sin indicar &h. Si los DATAs ya tienen el prefijo adecuado, el programa es aún más sencillo: Código: 10 SCREEN 2,2 20 FOR I=0 TO 31 30 READ A 40 VPOKE 14336+I,A 50 NEXT 60 PUT SPRITE 0,(128,96),1,0 70 GOTO 70 80 DATA &HC0, &H60, &H38, &H0C, &H06, &H03, &H01,&H01, &H03, &H06, &H0C, &H18, &H30, &H60, &H40,&HC0, &H01,&H03, &H06, &H1C, &H30, &H60, &HC0,&H80, &HC0, &H60, &H30, &H10, &H18, &H0C, &H06,&H03 Al loro con los cambios: para un sprite de 16x16 se usan 32 bytes y no 16, como ponías en tu código. Ahora sí te funcionará. Título: Re: Una de SPRITES Publicado por: x1pepe en 15 de Enero de 2006, 06:07:34 pm Muchas gracias por vuestra paciencia ;) , ahora sí que funciona beer:) Título: Re: Una de SPRITES Publicado por: pitpan en 15 de Enero de 2006, 06:15:44 pm Y aunque hace mucho que no hago nada en BASIC, algunos truquitos sí que recuerdo.
Prueba a hacer 0 DEFINT A-Z Para ganar algo de velocidad. Y si quieres copiar muchos datos a VRAM rapidito, te conviene usar DEFUSR=&h41:A=USR(0) y DEFUSR=&h44:A=USR(0) para activar/desactivar la pantalla (o al revés, que no me lo sé de memoria). Título: Re: Una de SPRITES Publicado por: x1pepe en 15 de Enero de 2006, 06:27:43 pm Gracias de nuevo. ;) Título: Re: Una de SPRITES Publicado por: Jon_Cortazar en 16 de Enero de 2006, 10:35:15 pm x1pepe, ánimo con el BASIC!!!
Te paso un ejemplo de cómo definir y mover caracteres en SCREEN 2 (era del antiguo foro, y lo he recuperado). Código: 10 REM Inicializo SC2 20 DEFINTA-Z:COLOR15,1,1:SCREEN2,2,0 30 REM Pongo 0 en toda la pantalla 40 FORN=6144TO6911:VPOKEN,0:NEXTN 50 REM Redefino caracteres 3 bancos 60 FORN=776TO879:READA:VPOKEN,A:VPOKEN+2048,A:VPOKEN+4096,A:NEXTN 70 REM Redefino colores 3 bancos 80 FORN=8968TO9071:READA:VPOKEN,A:VPOKEN+2048,A:VPOKEN+4096,A:NEXTN 90 REM * Descomprime y pinta maze * 100 FORN=0TO79:READA:A$=RIGHT$("0000000"+BIN$(A),8):FORM=1TO8 110 VPOKE6144+(N*8)+(M-1)+64,ASC(MID$(A$,M,M))+57:NEXTM:NEXTN 120 READX,Y:VPOKE6144+X+(Y*32),107 130 REM Inicia personaje 140 READP:D=5:PO=P:M=0 150 REM Control 160 A=STICK(0):L=0:V=0 170 IFA=1THEND=1:P=P-32:L=1 180 IFA=3THEND=3:P=P+1:L=1 190 IFA=5THEND=5:P=P+32:L=1 200 IFA=7THEND=7:P=P-1:L=1 210 M=M+1:IFM=2THENM=0 220 IFVPEEK(P)=106THENP=PO:L=0 230 IFVPEEK(P)=107THENV=1 240 VPOKEP,96+D+M:IFL=1THENVPOKEPO,0:PO=P 250 FORT=1TO10:NEXTT 260 IFV=1THEN GOTO 290 270 GOTO 160 280 GOTO280 290 REM Victoria 300 FORT=1TO10:FORM=0TO1:VPOKEP,108+M:FORN=1TO50:NEXTN:NEXTM:NEXTT:END 310 ' Patterns 320 DATA &h18,&h38,&h18,&h3C,&h5A,&h18,&h10,&h10,&h00,&h18,&h38,&h18,&h7E,&h18,&h08,&h08 330 DATA &h18,&h1C,&h18,&h38,&h3C,&h18,&h18,&h1C,&h00,&h18,&h1C,&h18,&h1E,&h18,&h24,&h36 340 DATA &h18,&h38,&h18,&h3C,&h5A,&h18,&h10,&h10,&h00,&h18,&h38,&h18,&h7E,&h18,&h08,&h08 350 DATA &h18,&h38,&h18,&h1C,&h3C,&h18,&h18,&h38,&h00,&h18,&h38,&h18,&h78,&h18,&h24,&h6C 360 DATA &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 370 DATA &h81,&h7D,&hEE,&h7E,&hDC,&hFA,&hFE,&h6C,&hFF,&h81,&h81,&h81,&h81,&h81,&h81,&hFF 380 DATA &h18,&h38,&h99,&h7E,&h18,&h18,&h24,&h66,&h00,&h18,&h38,&h99,&h7E,&h18,&h24,&h66 390 ' Colors 400 DATA &h80,&h80,&hA0,&hC0,&hC0,&h40,&h40,&h60,&h60,&h80,&h80,&hA0,&hC0,&h40,&h40,&h60 410 DATA &h80,&h80,&hA0,&hC0,&hC0,&h40,&h40,&h60,&h80,&h80,&h80,&hA0,&hC0,&h40,&h40,&h60 420 DATA &h80,&h80,&hA0,&hC0,&hC0,&h40,&h40,&h60,&h60,&h80,&h80,&hA0,&hC0,&h40,&h40,&h60 430 DATA &h80,&h80,&hA0,&hC0,&hC0,&h40,&h40,&h60,&h80,&h80,&h80,&hA0,&hC0,&h40,&h40,&h60 440 DATA &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 450 DATA &h60,&h90,&h90,&h90,&h90,&h80,&h80,&h60,&hF0,&hF0,&h70,&h70,&h50,&h50,&h40,&h40 460 DATA &h80,&h80,&hA0,&hC0,&hC0,&h40,&h40,&h60,&h80,&h80,&h80,&hA0,&hC0,&h40,&h40,&h60 470 ' Map 480 DATA &hff,&hff,&hff,&hff,&ha1,&h11,&h00,&h01,&hbd,&h15,&h7f,&hdd,&h81,&h15,&h40,&h55 490 DATA &hfd,&h14,&h5f,&h55,&h85,&h15,&hd1,&h55,&hf1,&h75,&h1d,&h05,&h9d,&h04,&h05,&hfd 500 DATA &h81,&hfd,&h7c,&h05,&h9f,&h11,&h41,&hfd,&hb0,&h57,&h5f,&h01,&h87,&hd0,&h50,&h7d 510 DATA &hfc,&h57,&hd7,&hc5,&h81,&hd0,&h14,&h15,&haf,&h07,&hd5,&hf1,&ha8,&h20,&h54,&h1f 520 DATA &haa,&hbf,&h05,&hc1,&hba,&ha5,&hfd,&h7d,&h82,&ha0,&h00,&h01,&hff,&hff,&hff,&hff 530 DATA 9,4,6241 Título: Re: Una de SPRITES Publicado por: Darth_Fistro en 16 de Enero de 2006, 10:48:44 pm Ahora sí que tengo un buen motivo para publicar las tablas comparativas de velocidad en basic. ¡Truquitos para los basiqueros! :D Tendré que ir "maquetando" la cosa ;)
Título: Re: Una de SPRITES Publicado por: x1pepe en 17 de Enero de 2006, 12:30:16 am Muchísimas gracias, este código es música para mis ojos beer:) .
Título: Re: Una de SPRITES Publicado por: pitpan en 17 de Enero de 2006, 12:32:12 am Pues yo hice lo contrario: una serie de programas de ejemplo para convencer a la gente de que había que usar ensamblador en lugar de BASIC. El más visual presentaba 32 sprites de 16x16 en pantalla en movimiento. En BASIC, incluso VPOKEando, se arrastraba. En ensamblador, la velocidad era brutal - de hecho, no se podían seguir con la vista si no se frenaba con algún HALT.
En ensamblador, ningún ordenador es lento. ;D Título: Re: Una de SPRITES Publicado por: Jon_Cortazar en 17 de Enero de 2006, 10:02:37 am Sin duda, el ensamblador es lo mejor.
Pero usando el BASIC de reentrada y vpokeando puedes habituarte a las direcciones que luego usarás en un futuro. Yo primero empecé con el BASIC y luego le pegué al ensamblador. Eso sí, un mapa de memoria de VRAM te vendría de perlas para agilizar esos PUT SPRITES y cambiarlos por simples vpokes. Propongo: ¿que os parece un concursillo de progamas en BASIC? (MSX Basic 1.0, prohibido usar rutinas CM, max...) ¿os molaría?. Espero respuesta para empezar a organizarlo!!! :) Título: Re: Una de SPRITES Publicado por: Harrison en 17 de Enero de 2006, 10:33:37 am Pero sin copiar listados de revistillas eennn cmptr:)
Título: Re: Una de SPRITES Publicado por: Darth_Fistro en 17 de Enero de 2006, 03:23:36 pm Magnífico, Jon, ¡me apunto! :D
Ahhh... un lugar donde a los programadores en basic se nos respetase y no se nos dijese "hmmmm... ta mu bien, pero sería más rápido y tal...", jajajajaja ;D Título: Re: Una de SPRITES Publicado por: jltursan en 17 de Enero de 2006, 03:33:29 pm Citar Espero respuesta para empezar a organizarlo!!! Pues a la voz de ¡ya!. Seguro que se puede recopilar un montón de información interesante. :) Título: Re: Una de SPRITES Publicado por: x1pepe en 17 de Enero de 2006, 09:49:46 pm Espero no haber sido el responsable de este alboroto, pero estoy muy contento y MUY animado, cmptr:) ARGHHHFF cmptr:) . Creo que vosotros podéis aportar mucho.
:god: :god: :god: ANIMO!!! :god: :god: :god: |