ola
weno ske vi un ejemplo
y vi un codigo for para moverse horizontalmente
pero no le entiendo :/
ya lei el manual y tampoco entiendo
kiero ver si me lo pueden explicar
ya que de nada sirve ke aga un juego
si no entiendo ke ice

for(i=0;i<8;i+=1){
if place_free(x-5,y-i){x-=5;y-=i;exit}}

Haces muy bien en preguntar por que es cada cosa, si te limitas a copiar codigos de tutoriales nunca conseguiras sacar tu juego de cierto nivel de calidad, que no es tu caso por lo que veo  :D

Bien, cuento con que sabes que es un bucle for y como se utiliza, no? le damos un peque?o repaso

for (i=0;i<10;i+=1){
show_message(string(i));
}

Bien las sentencias for tienen tres apartados separados por ";", el primer apartado se ejecuta solo una vez y al principio, normalmente lo usamos para declarar o inicializar la variable, en este casi y en la mayoria de for siempre se usa la i, que podria ser la j, o la variable "tulipan" sabes? xD

La sentencia, en este caso el show_message() que ves es lo que se ejecuta varias veces, siempre y cuando la condicion, que es el segundo apartado, se cumpla, al ejecutar la sentencia, se ejecuta el tercer apartado, asi quedaria el orden de acciones:

-se ejecuta primer apartado
-sentencia
-se ejecuta tercer apartado
-se comprueba segundo apartado
-se cumple segundo apartado? SI (contimuanos),   NO (termina el bucle)
-sentencia
-se ejecuta tercer apartado
-se comprueba segundo apartado
...

normalmente se aprovecha el valor que va teniendo la variable, en este caso la i  para usarla (en arrays, en multiplicaciones...)

en este caso lo aprovechamos para mandar a lo largo del bucle for 10 mensajes en orden cada uno con un numero del 0 al 9



Iendo al grano ese codigo que has puesto lo que hace es intentar subir una rampa hacia la izquierda con una inclinacion maxima de 8 pixels si no me equivoco, no?

Bien pues el for va del 0 al 8 ?Por que empieza por el 0 y acaba en el 8? Lo explicamos mas adelante
tenemos la funcion place_free(x,y), esta funcion lo que hace es devolvernos true (para que se cumpla el if) cuando la posicion que se le ha indicado dentro en coordenadas X e Y esta libre de objetos solidos

Entonces, en un primer ciclo del bucle for tendriamos la i a 0 y comprobariamos si en la posicion x-5 (5 pixeles a nuestra izquierda) y y-0 (a nuestra misma altura porque Y se queda igual) hay alguna pared solida, en caso de no haberla la funcion devolveria true, y se ejecutaria la sentencia de dentro del if que es aplicar el movimiento, al no haber nada en esa posicion trasladamos al personaje 5 pixeles a la izquierda y ninguno hacia arriba o abajo, y exit para no seguir comprobando por que ya hemos conseguido mover al personaje

?Que pasaria si no hubiera habido hueco en x-5,y-0 ?? El bucle habria continuado para seguir buscando hueco, en este caso i seria 1 en el ciclo siguiente, entonces se comprobaria si hay hueco en la posicion x-5,y-1 que es 5 a la izquierda y 1 por encima tuya, si hubiera hueco libre entonces el personaje subiria un poquito la rampa hacia arriba y se moveria hacia la izquierda, de ahi el efecto de que suba la rampa. Al haberle puesto una tolerancia de 8 podria hacer hasta 8 ciclos intentando buscar su hueco cada vez un poquitin mas arriba

#2 Diciembre 13, 2009, 11:48:24 PM Ultima modificación: Diciembre 13, 2009, 11:51:38 PM por Alfonsos1
creo que a la variable "i" se le llama indice

como veras el for tiene tres partes

for(primera parte; segunda parte; tercera parte)

la primera se determina el valor inicial del indice, en este caso 0

la segunda se determina la condicion que deve darse para que el codigo dentro del for siga ejecutandose, en este caso el codigo dentro del for se ejecutara solo si la variable i es menor a 8

la tersera determina en cambio del indice antas de cada ciclo (esepto el primer ciclo), en este caso la variable aumenta de a 1

EN ESTE CASO ESPECIFICO EL CODIGO DEL FOR SE EJECUTA 8 VESES

creo k ya entendi el codigo
lo ke dice ske

for(i=0;i<8;i+=1){
if place_free(x-5,y-i){x-=5;y-=i;exit}}

ahi por ejemplo
si hubiera una rampa
y colisiona con el personaje
no se cumplira place free(x-5,y-i) ya que i=0
entonces lo que hace ske le agrega una unidad mas a i
para ke detecte si asi ia keda libre
y pueda subir la rampa el objeto
es asi o me ekivoko?

Perefcto! acuerdate que para hacer rampas es imprescindible que el sprite de la rampa tenga precise collision check activado

muchisimas gracias ;D;D;D;D;D;D;D!!!!!!!
ustedes si ke son una gran ayuda :D