Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Silver_light

Páginas: 1 2 3 4 ... 23
16
Preguntas y respuestas / Re:Lista de elección aleatoria
« en: Agosto 03, 2019, 02:07:27 am »
Bueno Yo lo haria de esta forma...

Código: [Seleccionar]
var tanteo, maxObj, Lista, ListaMax;
maxObj = 2; // Numero de repeticiones (numero maximo de objetos tanteados)
ListaMax = 10; // Espacio de la lista

var i;
for(i=0;i<ListaMax;i+=1)
    {// Vaciar Lista
     Lista[i] = 0;
    }

var i;
for (i=0;i<maxObj;i+=1) // Repetir el ciclo hasta llegar al limite de objetos en este caso "3"
    {// Tantear maxObj que tienen que ser ajustados
     tanteo = irandom(ListaMax); // Aleatoriedad del tanteo a elegir
     
     Lista[tanteo] = 1; // Ajustar como creado o elegido como lo llames
    }

PD: Ya el array Lista tiene que ser declarado anteriormente o dara error otra opcion seria usar ds_list.
El único problema que tiene este algoritmo es que, la instrucción mas importante:
  tanteo = irandom(ListaMax); // Aleatoriedad del tanteo a elegir
Podría dar un numero repetido y el ciclo contaría de todas maneras la iteración. En el peor de los casos se dará para un elemento repetido y no habrán 3 elementos seleccionado sino 2 o para peor, solo 1.
Lo que cabría hacer es, verificar, que el número que saca "tanteo" no está repetido.
  tanteo = irandom(ListaMax); // Aleatoriedad del tanteo a elegir
 if (lista[tanteo] == 0)
     lista[tanteo] = 1;
  else
      i -= 1;  //repetir el ciclo restando -1, para decir que no cuente esta vuelta. (Aclaro que esto para mi desde un punto estructural siguiendo el paradigma de programacion estructurada, esta super mal XD )

El problema con este algoritmo es, lo que se llama "aplazamiento indefinido", que en el peor de los casos cae siempre en un espacio ocupado y se repite innecesariamente muchas iteracion.
Por lo que:
Citar
cual seria la manera mas eficiente [...]
No es la mejor manera, pero sigue siendo una solución corta de implementar. <3

17
Preguntas y respuestas / Re:Lista de elección aleatoria
« en: Agosto 02, 2019, 03:00:25 pm »
Hace nada respondí un tema sobre inventario, que si uno lo abstrae de una manera conveniente podrías convertirlo en lista.
Personalmente te recomiendo usar las funciones para listas: ds_list_*
Ya que estas cuentan con funciones muy interesantes que a la par de útiles, como mezclar y sacar elementos. Básicamente, lo que necesitas.

Dado que, tu lista de artículos está conformado por un grupo de objetos que pueden instanciarse:
1) Yo crearía la lista y colocaría el nombre de los objetos
2) Mezclaría la lista
3) Sacaría el elemento que esta al tope
4) Lo instanciaría
5) Mezclaría la lista
6) Sacaría el elemento que esta al tope
7) Instanciaría ese elemento
8 ) Mezclaría la lista
9) Sacaría el elemento que esta al tope
10) Instanciaría ese elemento

Entonces tendrías tres instancias de objetos distintos.

Hmmm, en otro caso, si son simplemente variables, podrías hacer un ciclo que recorra la lista indefinidamente, iniciadas con 0 al inicio, e ir usando un contador que vaya registrando la cantidad de unos que se ponen aleatoriamente dentro de la lista.

Saludos!

18
Preguntas y respuestas / Re:Sistema de inventario [2019]
« en: Agosto 01, 2019, 06:35:15 am »
Claro, lo que ocurre es que no estás verificando los límites cuando te desplazas con arriba y abajo.

if keyboard_check_pressed(vk_up){
    if (Select > MIN)
        Select -= 1;
    else
        Select = MIN;
}

if keyboard_check_pressed(vk_down){
    if (Select < MAX)
        Select += 1;
    else
        Select = MIN;
}
El código correcto quedaría como luce ahí, se verifica si está en el borde superior, si es así se acota hasta el último item, que sería en realidad el máximo elemento en la lista. Para cuando el elemento va más allá del tamaño de la lista, hace lo contrario, es decir, el cursor aparece al inicio de la lista.
Eso solucionaría todos los problemas respecto a que desaparece el menú.

Citar
Agregado 1: puedes intentar a hacer de que al agregar un objeto se rellene el inventario hasta el maximo numero que es 9?
El proceso es parecido lógicamente, al anterior. Solo que en vez de pisar los elementos siguientes, lo que se hace es ir copiando en el siguiente elemento, el elemento anterior. Básicamente lo que tienes que hacer es usar el ciclo en reversa e ir copiando los elementos en reversa para dejar "pos" con un elemento repetido, que luego sería remplazado por el nuevo item.
Ahora no puedo escribirte el código, pero estaría bueno que lo plantearas ya si no te sale, vemos.

19
Preguntas y respuestas / Re:Sistema de inventario [2019]
« en: Agosto 01, 2019, 04:23:58 am »
Estaría bien, si pusieras los códigos, sino no puedo saber qué está fallando XD
O el editable, lo que más te acomode.


20
Preguntas y respuestas / Re:Sistema de inventario [2019]
« en: Agosto 01, 2019, 02:54:47 am »
Gracias por tomar en consideración mi recomendación de explicarte con muchos detalles, así es mejor para entender el problema de raíz y no da lugar a confusiones XD

Bueno, lo que quieres hacer es eliminar un elemento, o pisarlo.
El caso es simple, se trata de posicionarse en una posición dada e ir pisando las posiciones con los valores subsecuentes. Esto en chino, quiere decir, que si yo tengo una lista por ejemplo:
pocimadiamantemanzanabananamoneda
Todo depende desde donde se quiera ir pisando los elementos, lo cual sería la posición llamada "P" o bien, el elemento que se quiere eliminar, estaría en la posicion "P".
En mi ejemplo usaré P= 3, que sería el elemento "manzana".

Lo que hará el algoritmo será entonces, ir copiando los elementos después de la posición P (que es 3), lo que hará es ir pisando los de manera que se vayan moviendo y la lista, en consecuencia se vaya vaciando.

Entonces, si yo comienzo en la posición 3, tendría que copiar el elemento de la posición siguiente, que sería el numero 4. Lo cual me daría la siguiente lista:
pocimadiamantebananabananamoneda
Como se puede notar, tenemos dos elementos repetidos, pero eso no importa realmente porque seguiremos pisando los elementos hasta que se termine la lista. Entonces ahora que tenemos el indice en la posición 4, tendríamos que copiar el siguiente elemento, es decir, copiar en inventario[4] el item que esta en la posicion siguiente. Lo que sería a grandes rasgos hacer: inventario[4] = inventario[5].
Entonces tendríamos la lista como sigue:
pocimadiamantebananamonedamoneda
Ahora, que tenemos fuera de la lista el elemento, tenemos que vaciar el elemento repetido que será siempre el último de la lista puesto que, todos los elementos se movieron hasta la posición P.
Entonces, para finalizar deberíamos hacer: inventario[5] = ""
Lo cual vaciaría el último elemento, y nos quedaría la lista, sin el elemento que habíamos seleccionado.
pocimadiamantebananamoneda
En esta lista idealizada suponemos que el inventario es de 5 elementos, pero luego lo haré para 9 elementos como habíamos acordado al incio.

Bien, luego de tanto tutorial XD vamos a ver el código. Primero que nada, deberías tener declarada una variable que indique la posición donde se sitúa el cursor para poder utilizar el elemento. Nosotros podríamos reutilizar la variable "Select" la cual nos indicaría la posición del cursor dentro del inventario para, justamente borrar ese elemento. (que entiendo que no se borra, sino que el jugador lo utiliza convenientemente).
Entonces, en el evento create donde declaramos nuestro arreglo, tendríamos la variable, "Select", y adicionalmente declararemos dos variables, que nos servirán para mantener al arreglo dentro de los limites de su tamaño, las cuales declararé como MIN y MAX, para saber cuando el vector está en la última posición y cuando está en la primera.
inventario[1] = ""
inventario[2] = ""
inventario[3] = ""
inventario[4] = ""
inventario[5] = ""
inventario[6] = ""
inventario[7] = ""
inventario[8] = ""
inventario[9] = ""

select = 1; // variable para saber donde se ubica nuestro cursor dentro del inventario
MIN = 1; // variable para indicar que tan pequeña es nuestra lista
MAX = 9 //variable par indicar que tan grande es nuestra lista

Ahora para hacer el borrado de un item, pondré como supuesto el evento TECLA ENTER, donde dentro tendríamos el siguiente código:
var i ;//iterador de la lista
var pos; //posicion donde se encuentra el elemento que queremos borrar

pos = Select; // "pos" es el lugar, donde esta situado nuestro cursor actualmente.

for(i=pos; i<MAX; i++){ //el ciclo comienza en la posicion "pos" para ir copiando todos los elementos siguientes
       inventario[i] = inventario[i+1]; //el elemento actual copiará el que está al siguiente. Es decir, si estamos en 3 copiara a 4, si estamos en 4 copiará a 5
}//el ciclo no opera fuera de esta llave

inventario[MAX] = ""; // eliminamos el elemento repetido, que es siempre el último en la lista.
Lo que hace el código, es lo que se explicó antes. Se posiciona en el lugar donde esta el cursor y va copiando los elementos de la lista uno a uno, con el siguiente que tenga al lado. Finalmente nos queda un elemento repetido que lo eliminamos con la instrucción inventario[MAX] = "";

En un principio el código debiera funcionar XD es una re-implementación que usaba en lenguaje C. Pero no sé a ciencia cierta si GameMaker tendrá algún problema diferente en cuanto a sintaxis.

Saludos!

21
Preguntas y respuestas / Re:Sistema de inventario [2019]
« en: Julio 31, 2019, 08:52:04 pm »
Saludos!
Bajé el editable y lo miré un poco. El problema que tiene es que solamente está almacenando el valor en una única variable.
Lo cual no sirve de mucho, aunque visualmente, si, cumple con parecerse a lo que es un menú de selección. No serviría de mucho, el hecho de que la variable guarde un valor del 1 al 9, puesto que necesitaríamos saber qué item se aloja en cada lugar.

Una variable común como la que estás utilizando, en este caso llamada "Select" es una variable que puede almacenar un único valor a la vez.
Deberías usar un array(también llamados arreglos, vectores o listas) lo que sería más sencillo de hacer, que si tuvieras por ejemplo 9 o 10 variables para guardar un item en cada espacio.
Se entiende por un array, a una variable que es capaz de almacenar varios valores simultaneamente.

Un ejemplo práctico usal es hacer uso de una variable de este tipo para guardar los meses del año. En Game maker tendríamos la estructura como:
mes[1] = "enero";
mes[2] = "febrero"
mes[3] = "marzo"
mes[4] = "abril"
mes[5] = "mayo"
mes[6] = "junio"
mes[7] = "julio"
mes[8] = "agosto"
mes[9] = "septiembre"
mes[10] = "octubre"
mes[11] = "noviembre"
mes[12] = "diciembre"
Como puedes notar, a diferencia de una variable común a la que solo se le asigna un nombre, como "Select", la variable de tipo array, tiene llaves cuadradas "[" y "]", lo cual indica que es una variable capaz de almacenar varios valores al mismo tiempo.
También como puedes notar, la variable lleva consigo, un numero, en este caso va del 1 al 12, lo cuál indica la posición o lugar de un determinado valor dentro de nuestro array.

Si mostrásemos un mensaje, queriendo ver el mes que está dentro de la posicion 3, haríamos en GML:
draw_text(0, 0, string( mes[3]);
Lo cuál mostraría al mes de "Marzo" en pantalla.

Para mostrar, toda la información en pantall,a como has de suponer, se tiene que recorrer la lista entera para poder mostrarla, por ejemplo:

draw_text(0, 20, string( mes[1]);
draw_text(0, 40, string( mes[2]);
draw_text(0, 60, string( mes[3]);
// ... y asi en lo sucesivo hasta
draw_text(0, 240, string( mes[12]);
Lo cual mostraría los valores uno, debajo de otro, enseñando en pantalla así los 12 meses del año. Como puedes notar, nuevamente, se usa un número que acompaña a la variable "mes" , para determinar qué valor mostraremos. Ese número que acompaña se llama usualmente "índice" (o posicion, lugar o del inglés, "index"). Entonces para nuestro ejemplo del mes de Marzo, la variable mes[3], tiene el indice tres.

Extrapolando la explicación a tu sistema de inventario. Estaría bien ponerle un nombre adecuado, por ejemplo:
inventario[1] = ""
inventario[2] = ""
inventario[3] = ""
inventario[4] = ""
inventario[5] = ""
inventario[6] = ""
inventario[7] = ""
inventario[8] = ""
inventario[9] = ""
Ahora hemos creado la variable "inventario" con  9 lugares disponibles para valores. Es decir, "inventario" ahora puede almacenar simultáneamente 9 diferentes valores. Nosotros colocamos comillas vacías ("") para indicar que el inventario está vacío.
Pero en la práctica podemos asignar cualquier valor que nos convenga, por ejemplo:  inventario[4] = "pocion magica".

Hay maneras más automatizadas de crear, y mostrar un array, pero eso ya depende de cuán familiarizado estés con el uso de ciclos no condicionados (o ciclo for).

Pero bien, ahí tu me dices las dudas que tengas, así explayamos más aún el tema.



22
Preguntas y respuestas / Re:¿Cómo esquivar muros?
« en: Julio 20, 2019, 03:02:41 am »
Bufff, hace milenios subí un ejemplo de como buscar un camino usando las funciones que ya de por si trae Game Maker.
https://www.comunidadgm.org/index.php?page=verdescargas&accion=descargaD&download_id=2305
Según el manual, si mal no recuerdo se basan en el algoritmo de A*. Que se supone es lo óptimo.

Estuve viendo el código que deja Guillem en la desc. y la verdad si supiera como medir la perfomance en GMS1.4 podría decir o no si mi teoría de que está gastando mucho CPU es correcta. Aún así, porqué querrías hacer un sistema desde cero cuando Game Maker ya lo trae de por sí?

Aúuuun así XD qué parte no entiendes? Yo veo el video bastante bien encaminado.
A lo mejor, la parte de la recursividad?


23
Me gusta tu algoritmo, fácil de entender e intuitivo de primeras. Aún asi te dejo mi propuesta, un script que hace lo mismo pero personalizado.
var xs = argument0;
var ys = argument1;
var obj = argument2;
var radio_min = argument3;
var radio_max = argument4;

randomize();

var d = irandom(360);
var r = irandom_range(radio_min, radio_max);
var xx = cos(degtorad(d)) * r;
var yy = -sin(degtorad(d)) * r;

instance_create(xs + xx, ys + yy, obj);

Bastaría llamarlo como:
scr_create_radio(x, y, objeto, 50, 100);

Para que crease el item dentro del radio de 50 y 100 pixeles.
Habría que colocar la condición para cuando no hay espacio libre solamente.

24
Preguntas y respuestas / Re:Ficheros JSON
« en: Julio 16, 2019, 06:37:56 pm »
Si y No, todo dependerá de cómo quieras apañartelas.En lenguajes como C, esas cosas no existen.

La idea en general como todos los archivos, es definir estructuralmente cómo uno va a guardar los valores, si lo haría en pares, si lo dividiría en secciones o en este caso concreto usaría la notación de JSON para armar un archivo.

Entonces no es estriiiiiictamente necesario usar ds_map functions, sino más bien guardar los valores respetando el estándar, si así se quiere, de JSON.
Sería conveniente usar ds_map si y solo sí se trataran de variables puras y duras  XD quiero decir, valores que a lo mejor no pertenecen a ninguna instancia concreta, sino más bien hablando de datos abstractos. Entonces si sería conveniente,  en primer lugar crear un mapa y llenarlo. Sería como la estructura sobre la que se rigen los datos que están por ahí volando.
Peeero en el caso de tratarse de objetos, no veo razón para hacerlo así. Podrías armar un script que directamente tomase la instancia abstracta y sacara en un fichero todos los datos comunes.
Luego simplemente lo abrirías de nuevo (o simplemente no lo cierras) de manera tal que los datos se escribiesen al final de la última modificación.

Entonces los objetos se escribirían uno debajo de otro.


25
Preguntas y respuestas / Re:Ficheros JSON
« en: Julio 14, 2019, 05:38:38 pm »
Los archivos JSON (javascript Object Notation) son archivos ligeros que se utilizan para el intercambio de datos, los cuales, por su estructura son fáciles de leer tanto para las personas como para las aplicaciones.
    Están construidas con dos estructuras basicas:

  • Una coleccion de pares del tipo nombre/valor. Lo que en Game Maker se conoce como un ds_map
(He aquí la razón de por qué te dijeron que uses JSON's con ds_maps)
  • Una lista ordenada de valores, conocidas en Game Maker como ds_list

Game Maker studio 2 cuenta con una funcion específica llamada json_decode(). Con esta funcion puedes decodificar una pieza de JSON y convertirla en un ds_map, para trabajarla entonces con Game Maker.

Como dato adicional, el fichero JSON es un archivo que es independiente del lenguaje, y se usa para modelar un objeto.
No sé si hayas trabajado antes con lenguajes "puros", si así puede decirseles, como C++/C/Java/Python/etc etecé XD
Pero mmm podrías tener algo como:
[gml]
objeto fantasma
solido = false
visible = true
[gml]
Que vendría a modelizar muy por encima un objeto de Game Maker. Entonces si quisiéramos por alguna razón hacer un JSON escribiríamos:

Código: [Seleccionar]
{
      "nombre": "fantasma",
      "solido": false,
      "visible": true
}
Nótese que lo que vendría siendo el nombre de las variables vá entre comilla, sustituiríamos el signo de igual = por los dos puntos : y que se separan con comas ,
También se pueden poner valores como array dentro de un JSON, e incluso otro JSON como campo de éste.(o que es lo mismo, un JSON dentro de una "variable").

No sé cuál es la máxima utilidad de tu Game_save(), pero yo a efectos prácticos usaría un text file, guardando por linea cada dato útil. Luego simplemente los recuperaría ciclicamente.

Saludos! :)

edit:
 XD me olvidé de dejar la página maestra donde explica todo, en spanish, detallado:
https://json.org/json-es.html

26
Juegos completos / Re:Lab 23 [Windows]
« en: Noviembre 10, 2018, 04:21:51 pm »
Pues si, la verdad es que interactua de manera muy rara  XD

Al intentar esconderme en el Nivel 1, al instante de hacerle click a la puerta, el cursor automaticamente se redirige hacia arriba a la izquierda. Lo que hace que eventualmente, al parecer, se salga del escondite sin hacer nada.
Quiero decir, al hacer click entra una milésima de segundo y sale del escondite para moverse solo hacia la izquiera, es super raro de explicar XD  [imagen 1]

Luego, para utilizar el menu, pues ahí si que está bastante complicado, creo que las imagenes son autoexplicativas(?
Mientras el cursor está en otro lado, lo items se seleccionan de una manera bastante rara. Quiero decir, ni siquiera el cursor está encima de los items y ya se seleccionan. Aún, si asi fuera, el colocar el cursor encima de los items, no los selecciona, sino que hay que buscar en la pantalla, dónde pasar el mouse por encima para que puedan seleccionarse. [imagenes 2 y 3]

Y bueno, el error gráfico de que se vean lineas entre los tiles XD
No pasé mucho el juego porque no tuve suficiente paciencia :P



27
Preguntas y respuestas / Re:Me explican las siguientes funciones?
« en: Octubre 28, 2018, 05:33:43 pm »
Bueno, ahí está el claro ejemplo de qué si utilizas el término incorrecto, se puede entender otra cosa xD

Todas las palabras reservadas, statements, se encuentran en el manual. Concretamente en el apartado: "The Game Maker Language(GML)" / "GML Language Overview"

Do, While, repeat, for. Son bucles/ciclos.

Break,Continue. Son modificadores de flujo para los bucles anteriores.

If, switch. Son condicionales de seleccion.


Las explicaciones, obvio, están ahí.

28
Preguntas y respuestas / Re:Me explican las siguientes funciones?
« en: Octubre 28, 2018, 03:47:40 pm »
Muy buenas.

Primero que nada, tienes que entender que no son funciones como tal, sino que son sentencias. Lo que viene significando, una instrucción. Más concretamente: "while" e "if" son sentencias condicionales.
        Es decir, una sentencia condicional es aquella que contiene y evalua una condición. En este caso while se utiliza para crear un ciclo dada una condicion:
while(llueve)  //mientras llueva...
  usar_paraguas();  // usar_paraguas
Luego, la sentencia (o instrucción) if, se utiliza también para evaluar una condicion, pero es para determinar un estado concreto.
if (tengo_hambre)
   comer();
Una variante de la sentencia if es if/else, para elegir, entre 2 caminos, por decir algo.
if (tengo_sueo) /7si tengo sueo
     dormir();
else //sino
    tomar_cafe();

Luego, globalvar y var son palabras clave(tambien se les llama palabras reservadas del lenguaje) que se utilizan para crear variables. Concretamente cada prefijo especifíca un alcance diferente para una variable. Lo cual, si bien, no es un tema complicado, explicarlo llevaría tiempo considerable.

Para terminar, recuerdo, no son funciones, son palabras reservadas. Son palabras que utiliza el lenguaje para determinar la sintáxis del código, es decir, para saber, cuando hay que hacer un ciclo, cuando tomar una decisión, cuando crear una variable temporal.


Luego, una función es un proceso que devuelve o no un valor. Más fácil de decir, es un subprograma que realiza una tarea.
Son fácilmente detectables porque llevan paréntesis y un grupo de parámetros.
var a; //esto es una sentencia 
asignar(a, 10) // esto es una funcion
Más arcaicamente, lo anterior es una llamada a una función y no una función definida como tal. Pero a fines prácticos es facilmente identificable para saber cuando llamar "funcion" a algo y cuándo no hacerlo.

Puede sonar un poco pretencioso hacer una explicación tan larga, pero es necesario, que sepas qué es cada cosa, sino, al momento de escribir una duda, es probable que se generen mal entendidos al no utilizar los términos de la manera correcta.
 
Si quieres alguna explicación extra, solo pregunta. (y)


Saludos!

29
Bueno, en ese caso lo que tienes que hacer, se me ocurre es utilizar una lista dentro de cada cliente. Usas dos ds_list's.

La forma de operar sería la siguiente, cada vez que un cliente se conecta al servidor, es el Servidor quien generaría un número único de identificador. El cual re-enviaría a todos los demás clientes que ya estén en el juego.
     Una vez que es enviado, cada cliente, almacena en una lista, el numero único, pongamosle "lista_id" y a su vez, crea el objeto que representará al jugador, y colocará el id de la instancia dentro de otra, llamemosla "lista_inst".

Algo como:


var id_instancia= instance_create(0,0, o_cliente_rep);
ds_list_add(lista_id, valor_unico)
ds_list_add(lista_inst, id_instancia)

Luego, al momento de que un jugador se desconectase, le enviaría un mensaje al servidor, el cual deberá re-enviar todos los clientes.
  Finalmente cada cliente debería recibir el valor_unico, buscarlo dentro de  la lista "lista_id" y quitarlo obteniendo la posicion. Luego se debería obtener la instancia en la misma posicion pero en "lista_inst" y eliminarla. Luego vaciar el lugar en la lista.

30
Grafismo & Composición / Re:Consulta para hacer mejor diseños
« en: Junio 17, 2017, 02:29:14 am »
Mi consejo y de hecho, el consejo que recomiendan usar en la industria del Concept Art es usar referencias.
Todos los que han trabajado como concept artists, por ejemplo, en el area de videojuegos usan referencias. Se "copian" podriamos decirle XD básicamente toman un elemento llamativo de algo en concreto y lo plasman, si es necesario usas más.

Sinceramente yo no recomiendo para nada hacer cosas al azar ni mucho menos sacarlas de la imaginacion(Esto si no eres bueno uilustrando, es muy, muuuy mala idea),  sino mas bien teniendo una idea clara, ya sea: una pose, una temática, un estilo de dibujo.

Por ejemplo si yo quisiera una pose de agachado, temática fantastica y un estilo anime, buscaría lo que me conveza más y uso referenciar para guiarme, no necesariamente necesita ser una copia fiel de todo.
Yo usé, mira, la primera imagen de cada enlace:

https://ar.pinterest.com/pin/AWeID0cTVF5D6f5J_--g5yyTautYAoO_Al38njC98xJQUhFiHdvVp4s/
https://ar.pinterest.com/pin/554294666618900283/
https://ar.pinterest.com/pin/482025966356115476/

Si ves en el resultado (imagenes adjuntas)
Me basé en una pose, no la copié totalmente y tomé el resto de elementos de las otras ilustraciones, como las alas y el decorado de la cabeza. Como asi tambien el vestido , en parte.
El resultado es un poco malucho xD por que lo hice rápido, pero bueno quería dejar la idea en claro cómo usar las referencias.
Para el pixel art es lo mismo, solo que dibujas con el ratón :P tu pixel art va a mejorar de acuerdo a cómo mejores como artista... es cuestión de saber dibujar, obvio.

Te recomiendo que te hagas un perfil en Pinterest si no lo conoces, es una página donde se sube bastante contenido conceptual y también tutoriales ilustrados. Haces unos cuantos tableros y vas organizando un poco las cosas.

Y lo último pero no por ello menos cliché: practica mucho XD


Páginas: 1 2 3 4 ... 23