{"id":37,"date":"2020-11-14T12:38:17","date_gmt":"2020-11-14T12:38:17","guid":{"rendered":"https:\/\/specnext.dev\/es\/?p=37"},"modified":"2020-12-25T11:27:30","modified_gmt":"2020-12-25T11:27:30","slug":"sprites-por-hardware-tutorial-1","status":"publish","type":"post","link":"https:\/\/specnext.dev\/es\/2020\/11\/14\/sprites-por-hardware-tutorial-1\/","title":{"rendered":"Sprites por Hardware \u2013 Tutorial 1"},"content":{"rendered":"<h5>Este es un extracto del art\u00edculo originariamente publicado en mi web <a href=\"https:\/\/lacavernainformatica.com\">lacavernainformatica.com<\/a><\/h5>\n<p>Pues todo empez\u00f3 con la salida del segundo Kickstarter del Zx Spectrum Next, y mi total imposibilidad de dejar pasar la ocasi\u00f3n por segunda vez. Si, s\u00ed, fui uno de los 5.236 patrocinadores que han contribuido un total de 1.847.106 \u00a3, al cambio actual en euros son unos 2.047.021,09\u20ac, para que este proyecto se pudiera realizar.<\/p>\n<p>As\u00ed que este verano, con esa sonrisa que le queda a uno cuando sabe que va a poder tener en sus manos el cacharrillo, aunque sea dentro de un a\u00f1o, e impulsado por el\u00a0<em>Hype<\/em>, me puse de nuevo a repasar las caracter\u00edsticas y nuevos avances que se hab\u00edan producido desde la primera tirada.<\/p>\n<p>Una de las caracter\u00edsticas que llam\u00f3 fuertemente mi atenci\u00f3n, como pod\u00e9is esperar, fue el tema de la aceleraci\u00f3n por hardware de los gr\u00e1ficos, pero a\u00fan lo hizo m\u00e1s cuando vi que el Basic que inclu\u00eda poco ten\u00eda que ver con aquellas versiones de sus ancestros.<\/p>\n<p>Los astros se hab\u00edan alineado, de vacaciones y con tiempo libre para cacharrear\u2026 Primero lectura somera de la documentaci\u00f3n y sobre todo ver si hab\u00eda alg\u00fan emulador para que pudiera probar como funcionaba esto. Efectivamente, gracias a la fant\u00e1stica comunidad que hay detr\u00e1s del Spectrum, encontr\u00e9 el\u00a0<a href=\"http:\/\/cspect.org\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Cspect<\/a>\u00a0y poco tiempo tard\u00e9 en tener frente a mis ojos la pantalla de arranque del Next.<\/p>\n<div class=\"wp-block-image\" style=\"text-align: center\">\n<h6 class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-59 aligncenter\" src=\"http:\/\/lacavernainformatica.com\/wp-content\/uploads\/Next_Pantalla_de_Arranque.png\" alt=\"\" width=\"636\" height=\"545\" \/>Pantalla de arranque del Zx Spectrum Next corriendo bajo el emulador Cspect<\/h6>\n<\/div>\n<p>\u00a0<\/p>\n<p>Ya con todo listo, tan solo me quedaba pensar que pod\u00eda hacer\u2026 Tras las primeras pruebas simples, parec\u00eda que todo funcionaba como la documentaci\u00f3n indicaba, pero como ten\u00eda tiempo no lo iba a dejar ah\u00ed.<\/p>\n<p>As\u00ed que tom\u00e9 una decisi\u00f3n, hacer un videojuego utilizando las nuevas caracter\u00edsticas y programando en Basic.<\/p>\n<p>La idea del videojuego, surgi\u00f3 espont\u00e1neamente al ver jugar a mi hija peque\u00f1a con un pulpo de peluche y recordar un querido arcade llamado\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Depthcharge\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Depth Charge<\/a>. Simplemente ten\u00eda que cambiar un poco el objetivo del juego, pero la base ya la ten\u00eda.<\/p>\n<p>As\u00ed que varios d\u00edas despu\u00e9s de ir aprendiendo poco a poco los entresijos del nuevo lenguaje, los nuevos comandos y las peculiaridades de la m\u00e1quina, traje a la vida a mi primer proyecto.<\/p>\n<div class=\"wp-block-image\" style=\"text-align: center\">\n<h6 class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-60 aligncenter\" src=\"http:\/\/lacavernainformatica.com\/wp-content\/uploads\/Octopus-Hunt.png\" alt=\"\" width=\"640\" height=\"513\" \/>The Octopus Hunt, mi primer videojuego en Basic para el Zx Spectrum Next<\/h6>\n<\/div>\n<p>El\u00a0<a href=\"https:\/\/github.com\/Nextric\/The-Octopus-Hunt\" target=\"_blank\" rel=\"noreferrer noopener\">Octopus Hunt<\/a>\u00a0hab\u00eda nacido, y aunque se pod\u00edan pulir muchas cosas, era un inicio.<\/p>\n<p>Con el proyecto terminado y ya de vuelta a la dura realidad, pens\u00e9 en compartir en mi canal de\u00a0<a href=\"https:\/\/youtube.com\/c\/Nextric\" target=\"_blank\" rel=\"noreferrer noopener\">Youtube<\/a>, a modo de tutorial, como hab\u00eda desarrollado el juego. Dicho y hecho, aqu\u00ed pod\u00e9is ver el resultado final y aprender como dar los primeros pasos para manejar Sprites y hacer vuestros propios videojuegos para este ordenador.<\/p>\n<figure class=\"wp-block-embed-youtube aligncenter wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\">\n<div class=\"wp-block-embed__wrapper\" style=\"text-align: center\">\n<p><iframe loading=\"lazy\" title=\"NextBasic  - Zx Spectrum Next -  Sprites Hardware  - Tutorial 1\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/5Fz23wG_f4E?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<\/div>\n<\/figure>\n<p>Aunque seguro que hab\u00e9is visto el v\u00eddeo, vamos a resumir aqu\u00ed los pasos iniciales que tenemos que seguir para poder hacer uso de nuestros Sprites en el Zx Spectrum Next.<\/p>\n<p>Primero cargamos nuestro fichero de Sprites y le asignamos el tama\u00f1o adecuado. Ya sab\u00e9is 256K por cada Sprite que tengamos.<\/p>\n<pre class=\"wp-block-code\"><code>70 REM Cargamos los sprites del juego\r\n80 REM 256 bytes por sprite\r\n90 LOAD \"octopus.spr\" BANK 16,0,2560<\/code><\/pre>\n<p>Luego simplemente tenemos que definir que el Banco de memoria que acabamos de cargar es de tipo Sprite, ya veremos m\u00e1s adelante que podemos definir otros tipos de bancos de memoria.<\/p>\n<p>Adem\u00e1s ser\u00e1 necesario limpiar los posibles Sprites en pantalla y marcarlos que sean visibles. Todo eso lo haremos con las siguientes sentencias.<\/p>\n<pre class=\"wp-block-code\"><code>250 SPRITE BANK 16\r\n260 SPRITE CLEAR : SPRITE PRINT 1<\/code><\/pre>\n<p>Una vez hecho esto ya podremos definir los Sprite y usarlos con las sentencia de definici\u00f3n de Sprite.<\/p>\n<pre class=\"wp-block-code\"><code>SPRITE a,x,y,s,n<\/code><\/pre>\n<p>Donde:<\/p>\n<ul>\n<li>a= N\u00famero que usamos para referenciar el Sprite en nuestro programa.<\/li>\n<li>x= Posici\u00f3n en el eje X de nuestro Sprite.<\/li>\n<li>y= Posici\u00f3n en el eje Y de nuestro Sprite.<\/li>\n<li>s=N\u00famero de Sprite real, es decir, la posici\u00f3n del Sprite dentro de nuestro fichero de Sprites. Se empieza a numerar a partir del 0.<\/li>\n<li>n=Indicamos si es visible o no. Para ello usamos 0 o 1.<\/li>\n<\/ul>\n<p>Por ejemplo:<\/p>\n<pre class=\"wp-block-code\"><code>sprite 15,150,150,1,1<\/code><\/pre>\n<p>Hay m\u00e1s opciones que podemos definir dentro del comando de Sprite, as\u00ed como m\u00e1s comandos \u00fatiles para el manejo de Sprites, pero no quiero complicar mucho el asunto en esta primera toma de contacto.<\/p>\n<p>De todas formas, en el v\u00eddeo si hago una explicaci\u00f3n de algunos otros detalles m\u00e1s avanzados que han sido necesarios para la creaci\u00f3n del Videojuego.<\/p>\n<p>Sin embargo, solo con estos comandos ya debes de ser capaz de mostrar un Sprite en la pantalla del Spectrum en la posici\u00f3n que le indiques.<\/p>\n<p>\u00a1Bien, ya eres un experto en programaci\u00f3n de NextBasic!<\/p>\n<p>\u00a1Atento a la continuaci\u00f3n de los pr\u00f3ximos tutoriales!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este es un extracto del art\u00edculo originariamente publicado en mi web lacavernainformatica.com Pues todo empez\u00f3 con la salida del segundo Kickstarter del Zx Spectrum Next, y mi total imposibilidad de dejar pasar la ocasi\u00f3n por segunda vez. Si, s\u00ed, fui uno de los 5.236 patrocinadores que han contribuido un total de 1.847.106 \u00a3, al cambio [&hellip;]<\/p>\n","protected":false},"author":14,"featured_media":72,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3,4],"tags":[6],"class_list":["post-37","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollo","category-nextbasic","tag-nextbasic"],"jetpack_featured_media_url":"https:\/\/specnext.dev\/es\/wp-content\/uploads\/sites\/2\/2020\/11\/DestacadaTutorial1.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/specnext.dev\/es\/wp-json\/wp\/v2\/posts\/37","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/specnext.dev\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/specnext.dev\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/specnext.dev\/es\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/specnext.dev\/es\/wp-json\/wp\/v2\/comments?post=37"}],"version-history":[{"count":8,"href":"https:\/\/specnext.dev\/es\/wp-json\/wp\/v2\/posts\/37\/revisions"}],"predecessor-version":[{"id":155,"href":"https:\/\/specnext.dev\/es\/wp-json\/wp\/v2\/posts\/37\/revisions\/155"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/specnext.dev\/es\/wp-json\/wp\/v2\/media\/72"}],"wp:attachment":[{"href":"https:\/\/specnext.dev\/es\/wp-json\/wp\/v2\/media?parent=37"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/specnext.dev\/es\/wp-json\/wp\/v2\/categories?post=37"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/specnext.dev\/es\/wp-json\/wp\/v2\/tags?post=37"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}