Mostrar Mensajes

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

Mensajes - arcangelcaos

436
Gracias a los dos, he usado un contador, mas o memos. Hay un evento que es al final del paht. Pues con ese contador cuento cuantas veces lanza ese evento, asi desde hay rellamo a el scrip para que se mueva y haga las comprobaciones. Cuando ese contador llega a lo mismo que movimientos tiene, ya no vuelve a llamar al scrip. Es un contador global. Por si a alguien le interesa
Ahora estoy atascado en esto, no entiendo donde fallo
while (i <> (a+1))
{
x1= criatura.x+5+(96*i)
y1= criatura.y+5

        if not (place_free(x1,y1))
        {
            obstaculo = collision_point( x1,y1, objAmigo, false, false)
            if (obstaculo = -4)
            {
            obstaculo = collision_point( x1,y1, objEnemigo, false, false)
            scrAtake(criatura,obstaculo)
            criatura.Mov = criatura.MovO
            break;
            }
        }
    i+=1
  }


Con este scrip pretendo que busque objetos delante de mi criatura, la criaturas no se pueden mover libremente, tiene establecidos unos cuadros, donde se centran al moverse, por eso con esto hago que vaya buscando en cada posición, que están separados uno 96pixeles, hasta que encuentre un objeto.
objAmigo  es un padre
objEnemigo es un padre

Se lo signo a cada instancia para saber si es amigo o enemigo. Y asi pasar de él, o atacarle.

El problema es que place_free simpre me detecta que hay una criatura, cuando no hay nada, nada de nada, he comprobado la room, en los puntos que se le asignan a x1 e y1.
Y lo peos es que collision_point siempre me devuelve -4, incluso si hay criatura.

No se donde puede estar el fallo.

PSEUDOCODIGO
1Comprar en la casilla delante de mi 96pixle, si no hay objeto, pasar a la siguiente casilla.
            Si hay objeto, si es amigo, pasar de él y comprobar la siguiente casilla
            Si es enemigo, obtener la instancia, y llamar al scrAtake para realizar los cálculos.

Gracias
437
Hola, otra vez parado, voy avanzando, pero tengo mis dudas.
Yo estoy acostrumbrado un poco a VB, que tenia una función que era WAIT, que hacia que esperara a que terminara una función antes de seguir con la otra.
Aquí no se si eso existe, y si no, necesito crear algo parecido.
Yo tengo lo siguiente

criatura = argument0
movi = criatura.Mov
repeat (movi)
{
i=1
a= criatura.DistAtk

while (i <> (a+1))
{
    if not place_free((criatura.x+(96*i)),y)
    {
        obstaculo = collision_point( (criatura.x+(96*i)),y, objAmigo, false, false)
        if obstaculo = -1
        {
            obstaculo = collision_point( (criatura.x + (96*i)),y, objEnemigo, false, false)
            scrAtake(criatura,obstaculo)
            break;
        }
    i+=1
    break;
     }
    i+=1
  }
    with (criatura)
    {
        sprite_index = sprEspada2Mov
        mipath = path_add()
        path_add_point(mipath, x, y, 100)
        path_add_point(mipath, (x+96), y,100)
        path_set_closed (mipath, false)
        path_start (mipath, 10,0,true)
     }
         


Vale, esto es un scrips que es llamado desde otro.
Las criaturas tiene un alcance para el daño, y unos puntos de movimientos. Pues el primer movimiento por decirlo asi si lo hace bien.
Comprueba si hay enemigos enfrente, si no, luego en el 2 cuadrado. Si los hay en alguno ataka.
Si no, avanza un cuadrado, y vuelve a comprobar, y avanzara tanto cuadrados como movimientos tenga asignados, y también comprobara si hay enemigos hasta la distancia que tenga asignada, el problema es lo que hace todo super rápido, no se espera que llegue al final del path para volver a repetir, como podría hacer eso.

Es en la función repetir() la que quiero que espere hasta que llegue al final del path.

Gracias
438
Gracias. Pero estoy probando otra cosa.
Creo un path temporal, punto de inicio y punto final. Hasta aqui bien. Pero necesitaria que cuando llegase a ese punto hiciera una cosas, lo malo es que me las hace antes de llegar. El path es de un scrip independiente de la instancia.



EDIT:
Lo conseguí. Buscando por hay vi una evento en other que es paht end, o algo así. Y hay pongo el código que quiero, perfecto, gracias.
Seguire ampliando el código para que haga todo lo que quiero.
439
Me estoy volviendo loco, no se como hacerlo.

Necesito que cuando llegue a un determinado punto se pare

Yo hago
if not place_free(250,400)
   { criatura = collision_point (250,400, objAmigo, false, false)
        with (criatura)
        {
      x1= 430
      sprite_index = sprEspada2Mov
      move_towards_point (x1, 384,8)
        }


Con esto veo si hay algún "amigo" en ese sito y le hago avanzar. Pero no se para

Y en step del objeto le he puesto
if x = x1
{ speed = 0}


Pero no se para, que hago, como lo hago. Se que se ha hablado mucho, pero no doy con la tecla. Y es aki precisamente el tema, no hay teclas. Se moverá solo y se parará solo al llegar.

440
Googleando ya encontré el fallo y lo solucione.

Lo que pasa es el que la utilidad del SDK para instalar las apis, no las instala todos, las 2.0 y 3.0 dan fallo. Hay que instalarlas mano.
Si alguno le pasa que avise y le digo como.

Gracias
441
Hola, estoy compilando para ver como se ven en android y si da algún fallo alguna cosa, y me salta estos erroes

-build-setup:
[getbuildtools] Using latest Build Tools: 21.1.2
     [echo] Resolving Build Target for facebook...

BUILD FAILED
c:\Program Files (x86)\Android\android-sdk\tools\ant\build.xml:601: The following error occurred while executing this line:
c:\Program Files (x86)\Android\android-sdk\tools\ant\build.xml:542: Unable to resolve project target 'android-8'

Total time: 10 seconds


Alguno sabe que es??
442
Preguntas y respuestas / Ayunda movimiento instancia
Enero 09, 2015, 05:32:28 PM
Hola, aquí ando otra vez. Vamos a ver si me explico lo que quiero, haber como me iluminais porque no doy con la tecla.

Tengo una room, con 2 filas horizontales, con 14 puntos "x" fijado a cada una.
Yo tengo una reserva de criaturas abajo de la room, arrastro la criatura hasta uno de esos puntos en una de las líneas. Si esta ocupada lo devuelve a la reserva, y si no la coloca centrada.

He aquí donde viene el tema, yo ahora le doy a un botón pasar turno.
Cada criatura tiene extablecido unos movimiento en línea recta, 2, 3, 4, etcc.  multiplicado por 92 cada uno, para asi llegar al punto de la línea que le corresponda.

Como ya se los puntos donde puede haber criaturas hago lo siguiente:
if not place_free (x,y,)
    criatura = colision_point(x,y, objAmigo)    //objAmigo es un padre de cada criatura
    move_towar_point ( criatura.x+(movimiento*92), criatura.y+(movimiento*92))

El problema es que no se para, sigue el movimiento, como puedo hacer que pare cuando llegue a ese punto.
Pero es que es mas, para completar la información, puede estar en 14 puntos diferente.
Otra cosa, he de colocar que antes de iniciar el movimiento compruebe si tiene a 92pix una criatura, si es asi, comprube si es amiga o enemiga (objetos padres), si es amiga, pase por encima, si es enemiga ataque (función independiente), y si no hay nada, que lo compruebe a 184 px, porque tiene de alcance 2 cuadros. Si tampoco hay nada, ande 92 pix, vuelva a comprobar si hay alguna critura a su alcance, delante, no al rededor, y vuelva a  empezar, asi hasta los movimientos que tenga asigandos en el evento créate.

Valo, yo he pensado en collision_ line (x,y, x1, y1, objeto) hasta hay bien. Pero como hago que se pare, con move_towar no para de andar.

Ahh, y otra cosa que me pasa, puede haber varias criaturas, y quiero que ande una, haga sus ataques y cuando termine que empiece la otra, y ahora se mueven todas prácticamente al mismo tiempo. Hay alguna manera que hasta que no finalice una función no continue con otra???

Gracias, espero haber explicado bien.

EJEMPLO UN POCO GRAFICO

__ __ __ __ __ __ __ __
__ __ __ __ __ __ __ __

A_ __ __ E_ __ __
__ __ __ __ __ __

Que A avance los movimientos, hasta que llegue a su destino y se pare, y si se encuentra a E durante el camino, que le ataque.
443
Haber, yo he pensado hacerlo asi, pero si me alumbráis de hacerlo de otra manera mejor. Mirar lo que estoy haciendo
Tengo un txt con el nombre de todos los objetos
Tengo un ini, con la cantidad de cada objeto

Quiero hacer como un libro, que me muestre en cada hoja unos objetos en función de la cantidad que tengo en el ini
Bien, he pensado este código al abrir la room
ini_open("Datos\CriaturasPosee.ini")
criaturas = file_text_open_read("Datos\CriaturasPosee.txt")
global.CriaturasCuartel = ds_list_create()
while not(file_text_eof(criaturas))
{
criatura= file_text_read_string(criaturas)
ncriatura= asset_get_index(criatura)
cantidad= ini_read_real('CriaturasPosee',criatura,0)
    if cantidad>0
    {
        repeat (cantidad)
        {
        ds_list_add(global.CriaturasCuartel,criatura)
        }
    }
file_text_readln(criaturas)       

global.TotalCriaturas = ds_list_size (global.CriaturasCuartel)
//ds_list_sort(CriaturasCuartel,1)
global.Paginas = ceil(global.TotalCriaturas/15)
global.pagina = 1
global.posicion =1
global.posicionrelativa =1
draw_text(735,80, "global.pagina" + "/" + "global.paginas")
    repeat (15)
        {
        global.posicionrelativa = global.posicion
        criatura= ds_list_find_value(global.CriaturasCuartel,global.posicionrelativa)
        ncriatura = asset_get_index(criatura)
        switch (global.posicion)
         {
         case 1:
         x1= 608
         y1=128 ;break
         case 2:
         x1= 608+128
         y1=128 ;break     
         case 3:
         x1= 608+252
         y1=128;break
         case 4:
         x1= 608
         y1=128+128;break
         case 5:
         x1= 608+128
         y1=128+128;break
         case 6:
         x1= 608+256
         y1=128+128;break
         case 7:
         x1= 608
         y1=128+256;break
         case 8:
         x1= 608+128
         y1=128+256;break
         case 9:
         x1= 608+256
         y1=128+256;break
         case 10:
         x1= 608
         y1=128+384;break
         case 11:
         x1= 608+128
         y1=128+384;break
         case 12:
         x1= 608+256
         y1=128+384;break
         case 13:
         x1= 608
         y1=128+512;break
         case 14:
         x1= 608+128
         y1=128+512;break
         case 15:
         x1= 608+256
         y1=128+512;break
         case 16:
         x1= 608
         y1=128+640;break
         case 17:
         x1= 608+128
         y1=128+640;break
         case 18:
         x1= 608+256
         y1=128+640;break
         }
         instancia= instance_create(x1,y1,ncriatura)
         if (global.TotalCriaturas = global.posicionrelativa)
         {
         break
         }
         global.posicion += 1
        }


el swicht lo uso poner cada objeto en un lugar correspondiente.

Ahora me he creado 2 botones, uno hacia atrás y otro hacia adelante, el de atrás en principio funciona una parte, la de si estoy en la pagina 1, pero no se el otro código dado que la de avanzar no funciona.
tengo este código
if not (global.pagina = global.Paginas)
    {
    global.posicion = 1
    i= global.pagina
    global.pagina +=1
    draw_text(735,80, "global.pagina" + "/" + "global.paginas")
    repeat (15)
        {
        global.posicionrelativa = global.posicion + (i*15)
        criatura= ds_list_find_value(global.CriaturasCuartel,global.posicionrelativa)
        ncriatura = asset_get_index(criatura)
        switch (global.posicion)
         {
         case 1:
         x1= 608
         y1=128 ;break
         case 2:
         x1= 608+128
         y1=128 ;break     
         case 3:
         x1= 608+252
         y1=128;break
         case 4:
         x1= 608
         y1=128+128;break
         case 5:
         x1= 608+128
         y1=128+128;break
         case 6:
         x1= 608+256
         y1=128+128;break
         case 7:
         x1= 608
         y1=128+256;break
         case 8:
         x1= 608+128
         y1=128+256;break
         case 9:
         x1= 608+256
         y1=128+256;break
         case 10:
         x1= 608
         y1=128+384;break
         case 11:
         x1= 608+128
         y1=128+384;break
         case 12:
         x1= 608+256
         y1=128+384;break
         case 13:
         x1= 608
         y1=128+512;break
         case 14:
         x1= 608+128
         y1=128+512;break
         case 15:
         x1= 608+256
         y1=128+512;break
         }
         instancia= instance_create(x1,y1,ncriatura)
         if (global.TotalCriaturas = global.posicionrelativa)
         {
         break
         }
         global.posicion += 1
        }
    }


He ido comprobando paso a paso lo que hace y mas o menos empieza bien, pero al llegar a cierta posición me da como ncriatura -1 en la posición 23, cuando en realidad hay mas criaturas, como 60 asi.
Puedo ver de una sola vez lo que hay en la lista? hay alguna función para verla en pantalla?
Donde puede estar el fallo? alguno lo ve?, y no se si los siguientes valores los hace bien porque no me deja continuar






Lo dejo por si a alguien le puede servir de inspiración para algo.
Faltaria añadir eliminiar todos los objetos antes de crear los nuevo en los eventos de las paginas.


El error era que había un espacio en la ultima línea del txt, no se veía, no se notava, pero hay estaba.


Tened cuidado de no dejar un espacio o línea en blanco al final del txt  :'( :'( :'( :'( :'( :'( :'( :'(
444
Preguntas y respuestas / Re:Mil dudas con collision
Enero 04, 2015, 12:17:17 AM
Gracias.
Para llamar a mi scrips seria algo asi??
Miscrip (id, idcolision)
Para que asi en mi scrip use esos argumentos verdad??

Ahh, y otra cosa, en la de circle puede haber varios objetos, como hago k pase de uno a otro hasta que se cumpla la condicion tipo=enemigo?? Por ejemplo. (Mi unidad es rodeada, por un lado unidades amigas y por otro enemigas
445
Preguntas y respuestas / Mil dudas con collision
Enero 03, 2015, 08:53:33 PM
Madre mía, llevo todo el día programando y haciendo cosas, y o estoy ya que no carburo bien o no entiendo las opciones.
Estoy intentando generar un evento de colision.
En el evento (script) tendrá dos argumentos, mi objeto, y el objeto contra el que coche. Dentro de este evento se hacen cálculos para ver el el daño que se causa y la vida que queda y si procede se destruya la instancia. Es que hay habilidades, etcc que afectar al resultado, por eso un calculo grande.

Bien, aquí es donde viene mi dilema, lo explico en seudocódigo.

Tengo una unidad mía, que se moverá al acabar un tiempo o que yo le de finalizar turno. Bien

Hola, la unidad se mueve "2cuadros" = 64pixles x 2, en cada movimiento, puede ser que tenga aliados delante o enemigos.
Además tiene un ataque que llega 64x2 (uso 64, que son los pixeles que ocupa cada casilla y enemigo)

Necesito que al STEP (ANDAR) compruebe si tiene algún enemigo en frente, pero puede ser que haya un amigo a 64 y el enemigo a 64x2. Entonces debe atacar al enemigo, pero no al amigo. Todos tiene una variable que los identifica como Tipo:Amigo/Enemigo.

Si hay un enemigo, que llame a la función colisión creado por mi, con argumento1= mi unidad, argumento2 = el enemigo.
Para que así yo ya en dicha función yo haga mis cálculos y varié su variables según los resultados.

He visto collision_line para un tipo de unidad, y collision_circle, para otras. Pero lo que no se es como averiguar con que objeto a chocado, para asi poder decidir si sigue andando o ataca.

Espero haber explicado bien.

Gracias.

Con que me digáis como averiguo conque instancia a chocado, me vale. Dado que puede haber 2 o mas instancias del mismo objeto. Y tengo como 100 objetos diferentes, que pudiera haber, pero como mucho habrá 10 al mismo tiempo en la room
446
Mil gracias, funciona perfectamente.
447
Haber si me explico lo que no entiendo.
Yo tengo un objeto con una variables que se definen al crearse, que se dibujan al rededor del objeto con draw text
Hasta aquí bien, pero ahora, yo tengo 2 instancia de objeto, osease, esta  veces en la room. Yo hago drawn_text (obj.x,obj.y, obj.variable)

He probado con  instancia = instance_id
drawn_text(instancia.x,instancia.y, instancia.variable)
pero no me lo hace.

Pues bien, solo me lo dibuja en la primera instancia, no el segunda. Como puedo hacer que me lo dibuje en la segunda, y ahh, las variables son independientes para cada instancia de un mismo objeto?, por ejemplo la vida.
Gracias

448
Al final, buscando, buscando, encontré

Codigo final valido
x1=64
y1=64
ini_open("Datos\CriaturasPosee.ini")
criaturas = file_text_open_read("Datos\CriaturasPosee.txt")
while not(file_text_eof(criaturas))
{
criatura= file_text_read_string(criaturas)
ncriatura= asset_get_index(criatura) // es que el instance_create no reconoce nombres, solo número, y hay que averiguar el número del objeto
cantidad= ini_read_real('CriaturasPosee',criatura,0)

    if cantidad>0
        repeat (cantidad)
            {
            instance_create (200+x1,200+y1,ncriatura)
            if x1> 750
                x1+=64
            else
                x1=64
                y1+=64
            }
file_text_readln(criaturas)       
}
449
Encontre lo que falla de primeras, pero ahora me falla otra cosa.

en vez de while   hay que poner      while not

Pero ahora el instance_create  me dice ilegal tipe,
No se que puede ser, creo que es algo de string, pero he probado de todas las maneras y nada.
450
Hola otra vez. Esto con  :GMS:.
Tengo un txt con una lista de criaturas, en cada línea un nombre.
objcriatura1
objcriatura2
objcriatura3

Tengo un ini con la cantidad de cada criatura.

[CriaturasPosee]
objcriatura1=2
objcriatura2=1

Puede ser que esa criatura del txt no este en el ini.

Bien, lo que quiero es que me lea todo eso y me pongas los objetos en el mapa.
Yo he desarrollado esto, pero no me da error, pero no se donde falla.
Hay alguna manera de ver que valores cogen las variables mientras se ejecuta, es que no lo consigo  ni en modo debug.

He creado un objeto, sin sprite, no visible con el siguiente código
evento créate

x1=64
y1=64

ini_open("Datos\CriaturasPosee.ini")
criaturas = file_text_open_read("Datos\CriaturasPosee.txt")
while (file_text_eof(criaturas))
{
criatura= file_text_read_string(criaturas)
cantidad= ini_read_real("CriaturasPosee",criatura,0)

    if cantidad>0
        repeat (cantidad)
            {
            instance_create (200+x1,150+y1,criatura)
            if x1< 750
                x1+=64
            else
                x1=64
                y1+=64
            }
file_text_readln(criaturas)       


y no me hace nada, creo que esta bien expresado.
en seudocódigo es lo siguiente:
cojo el nombre de un objeto
voy al ini y miro la cantidad
el 1 lo pongo en una posición, si hay 2, lo pongo al lado, y si llego al final de la room, bajo una línea y vuelvo a empezar
avanzo una línea en el txt
cojo otro nombre y repito la operación,
asi hasta que llegue al final del txt.