avanzando en mi proyecto (agradecer a la comunidad por su ayuda) me preguntaba ?como hago para que cada objeto solo pueda moverse a una determinada distancia? o de otra manera como hago para que se muevan en un circulo imaginario de radio determinado y no puedan sobepasar ese circulo imaginario?
Avanzando y gracias
En el evento CREATE:
direction=random(360)
speed=4
En el evento STEP pone:
if distance_to_point(xstart,ystart)>=100 {direction=round(random(360))}
Es solo un ejemplo, podes ir cambiando numeros o codigos por ejemplo si queres que se detenga cuando llegue a 100 pone speed=0
3dgeminis no creas que no lo estoy intentando pero no acabo de dar con la solucion correcta a la que yo quiero....de la forma en que me dices y ajustandolo un poco lo que me pasa es que cuando el objeto llega al limite del radio se me queda parado y ya no puedo moverlo nisiquiera dentro de ese radio.En mi juego,todo va por turnos,y se pasa el turno apretando enter.Lo que necesito es que mientras no se aprete enter el objeto tenga total libertad de movimientos deentro de ese radio, y que no pueda sobrepasar ese radio pero que si toca con el limite no pueda salir de el pero si seguir moviendose dentro del "circulo".Estoy en ello....mil gracias
Yo creo que te has metido en un embolao sin saber siquiera programar basicamente en GML. Leete el manual, la parte de programaci?n, y empieza con ejemplos y proyectitos peque?os y simples que aspiren simplemente al aprendizaje, no ha hacer un juego de turnos de guerra mientras me solventan todos y cada uno de los problemas que me surjen que de haberme molestado en instruirme un poquito podria haber solucionado una gran parte de ellos por no decir todos.
Sin animo de ofender, en serio!
:-[
Cita de: Zeneke en Diciembre 22, 2010, 12:36:59 AM
Yo creo que te has metido en un embolao sin saber siquiera programar basicamente en GML. Leete el manual, la parte de programaci?n, y empieza con ejemplos y proyectitos peque?os y simples que aspiren simplemente al aprendizaje, no ha hacer un juego de turnos de guerra mientras me solventan todos y cada uno de los problemas que me surjen que de haberme molestado en instruirme un poquito podria haber solucionado una gran parte de ellos por no decir todos.
Sin animo de ofender, en serio!
:-[
Es un buen consejo el tuyo...y no creas que no lo hago (lo de leer el manual y todo eso)...pero solo pido ayuda a quien quiera darmela...y si mis posts ademas de ayudarme a mi ayudan a otros pues realmente no veo ningun inconveniente....es mas...creo que es la base de una comunidad...si puedes me ayudas,a mi y a todo aquel que lea tu ayuda,y cuando yo pueda ayudarte ten claro que lo har?.....este foro (preguntas y respuestas) tiene 96 paginas actualmente justo de eso..de preguntas y respuestas...creeme....cuantas mas mejor...para ti no,que parece ser que sabes de programacion...pero para gente como yo (que no somos pocos) es toda una suerte contar con gente que no le importa ayudar a ense?ar...yo no he pedido a nadie que me haga un video juego...y si tienes toda la razon...me he metido en un embolao...pero no se porque eso deberia importarte.Si tengo mil dudas....intentare buscar soluciones...si no las encuentro...pregunto...y quien quiera responder que lo haga.La cosa va asi.Que sentido tiene un foro de preguntas donde no se puede preguntar?Un saludo
:'( te apoyo amigo... No est? bien preguntar como loco, pero no hay nada de malo preguntar s? no se encuentra una respuesta, en fin suerte a los dos.
No pongas palabras en mi boca.No he dicho que no puedas preguntar, simplemente te veo bastante verde con GML y te he sugerido que te instruyas un poquito m?s con esto de picar codigo antes de ponerte a hacer un proyecto de tal magnitud. Pero bueno, que tu veas pero a mi en su dia este tipo de consejo me ayudo bastante.
Es como si yo pregunto:
-?Que es un sprite?
-?Como hago un sprite?
-?Como importo un dibujo a un sprite?
-?Como uso el sprite?
-?Que es un objeto?
-?Como uso un objeto?
Y asi sucesivamente...
Es un ejemplo pero esta muy relacionado con lo que te pasa.Como veras todas estas preguntas se responden mirando un poco el manual, poniendo un poco de tu parte, poniendo interes y no queriendo que te solucionen el problema a la primera de cambio sino investigando un poco, asumiendo conceptos y aplicandolos poquito a poco con ejemplos, pruebas,etc .Y por supuesto preguntando, pero que el resto de la gente que usa el poquito tiempo que tiene a responderte sepa que por lo menos te lo estas currando.
Sino para nosotros se nos hace muy pesado.
En este problema que tienes en concreto, con la solucion que te han dado, con solo mirarte como funciona cada tipo de evento y mas en concreto el evento Step, y mirando tambien algunas propiedades del objeto como pueden ser direction, speed,etc, hayas la solucion por ti mismo SEGURO. Te lo digo por experiencia porque yo tambien he estado en tu situaci?n, pero antes de preguntar a lo loco me he molestado en ser un poquito autodidacta, complementandolo obviamente con ayuda externa.
Lo mas simple seria darte la solucion a tu problema ahora mismo, pero prefiero que te estrujas los sesos e investiges a dartelo echo. Prefiero dar la ca?a en lugar del pez. De echo, la mayoria de usuarios que te van a responder, desconoceran en parte tu codigo, asi que preferiran darte pseudocodigo o la manera de hacerlo que no codigo CONCRETO. O al menos eso quiero pensar...
Saludos y lo siento por la chapa!
;D
ok tio acepto tu consejo pero ahora te voy a dar otro yo a ti.....la proxima vez que quieras dar una opinion personal sobre alguien es preferible que lo hagas via "mensaje privado" que para eso estan...basicamente por que paso de tener que mantener una conversacion sobre un tema que no tiene nada que ver con el tema en cuestion del hilo de este foro.Si te apetece seguimos y creamos 4 paginas en este hilo debatiendo a ver donde esta la linea que separa "lo que se puede preguntar" y lo "que segun tu no".Pero tambien te dir? que no te molestes en responder a temas que ni te van ni te vienen.Yo tambien veo cosas en los foros (de todos los que miro) que no me gustan...pero no voy por ahi de director de orquesta cuando la batuta no esta en mi mano.Yo soy admin y moderador de un foro(que no este claro)desde hace tiempo y la verdad...es que no se realmente que hago yo....debatiendo esto contigo aqui.
[gml]if se_la_respuesta = true and me_apetece_contestar=true {instance_create(x,y,respuesta)} amabilidad+=1
else
{global.turno+=1} //y no pasa na[/gml]
Vamos que no te has enterado de nada o simplemente haces caso omiso porque lo unico que te importa es que te pegen codigo y hacer despues un copia y pega en tu editable...
Perfecto, no pienso molestarme m?s, yo ya he cumplido. En su dia lo tom? como un buen consejo y supe aplicarlo pero bueno tu te lo has tomado como una ofensa. Perdona entonces.
Y lo pongo aqui porque no tengo el don del "post-it" pero muchos usuarios desgraciadamente deberian aplicarse el cuento.
do{
if (sabe_respuesta ==true) and (le_apetece_contestar==true) {respuesta=instance_create(mi_editable.x,mi_editable.y,objRespuesta);
sensacion_de_haber_aprendido_algo=false;
}
else
{global.turno_de_otro_usuario_que_no_me_hace_ningun_favor+=1;}
}while(proyecto_terminado==true);
//Puedes cambiar el do while por un while(1), asi el bucle seria infinito, tu mismo...
De echo, este codigo no funcionara nunca (lee entre lineas) asi que yo buscaria otro modo de encarar el problema, aunque bueno si para ti no resulta un problema no se para que me molesto...
Suerte con tu proyecto y que te "ayuden" aprendas mucho!
:D
realmente no se si lo que esperabas cuando escribiste el primer post se parece en algo con lo que acaba de suceder...deduzco que no...con lo cual te recuerdo que tu iniciaste el tema y asi estan las cosas.Intento ser constructivo(en todo en la vida).Con lo cual,te repito,acepto(sinceramente) tu consejo.Y muy posiblemente la aptitud de los dos...haya llebado el tema a una discusion de patio de colegio(no era mi intencion) y constructivamente te pido disculpas a ti y a toda la comunidad que se haya podido sentir molesta leyendo esto.En serio con todo respeto,quiero decir que has deducido muchas cosas sobre mi, y sobre mi manera de enfrentarme a los problemas que me encuentro en Gm8 sin base ni fundamento alguno.Y tio,acepto tu opinion....pero tu opinion es un pececillo nadando en el mar de las opiniones.
gracias por el consejo y eso....que paso de tener que discutir con nadie cuando mi unica intencion es,jugar y hacer un videojuego(o llamalo como quieras).los problemas reales estan por aqui fuera...solo faltaba tener que discutir tambien aqui dentro.Un saludo
No esperaba crear polemica ni mucho menos. Solo que he leido todas tus dudas y la sensaci?n que me ha dado ha sido la de un novato "poco currante". Perdona si no es asi pero es la sensacion que me has dado y la sensacion general que me da de aqui a un tiempo los nuevos usuarios. De ahi esa especie de posicion de director de orquesta que me has otorgado. Quiza haya colmado mi paciencia o haya perdido la comprension en la perspectiva con la que se ve envuelto un usuario precoz en GML.
Realmente no me lo he tomado como discusion, en principio solo queria aconsejarte y quiza haya subido el tono por mutua culpa. Asi que yo tambien te pido disculpas.
He deducido que mueves al soldado con el rat?n. De no ser asi, puedes cambiar el motor. Te he creado un editable que tambien he dejado adjunto, eso si , en gm7 aunque es totalmente compatible con gm8. Para que luego digan que soy mala persona...
Te lo explico a continuaci?n:
-ObjProta CREATE EVENT:
[gml]
velocidad=3;
distancia=100;
xx=x;
yy=y;
[/gml]
-EVENTO DRAW:
[gml]
draw_sprite(sprite_index,image_index,x,y);
draw_circle(xstart,ystart,distancia,1);//Dibujamos el circulo con el radio de alcance
//del personaje[/gml]
-EVENTO GLOBAL LEFT PRESSED:
[gml]
/*Si la distancia entre las coordenadas iniciales de la instancia
y las coordenadas del raton en el momento en que presiono el boton izq. del raton
son menores al radio de movimiento del personaje(distancia), entonces, guardamos
en xx e yy las coordenadas del raton. Ademas, solo las guardamos si hemos cliqueado
en una posicion libre.*/
if point_distance(xstart,ystart,mouse_x,mouse_y)<distancia
{
if position_empty(mouse_x,mouse_y)
{
xx=mouse_x;
yy=mouse_y;
}
}
[/gml]
-EVENTO STEP
[gml]
mp_potential_step(xx,yy,velocidad,1);//Movemos hacia xx e yy y chequeando
//si nos cruzamos con algo. Si es asi, esquiva el obstaculo.
[/gml]
Tenemos al personaje. Si clickamos dentro del radio de alcance se mueve y esquiva los obstaculos que se encuentre pero siempre sin salirse del circulo. Si clikamos fuera del circulo, simplemente no se mueve. Puedes modificar esta parte si quieres. Con lo que te he dado es facilmente modificable.
Espero que sea esto lo que pides.
Saludos!
Es complicado tener una perspectiva global de todo usuario...por eso has de entender que (no me pongo ni a mi ni a ti en el ejemplo) hay gente que controla mucho de un tema y otros que no.Y cuando estas en los que si controlan del tema (me pasa en mi profesion) no entiendes como puede ser que haya gente que no tenga esa facilidad para enlazar conceptos hasta llegar a una posible solucion que has adquirido con el tiempo.
Con la experiencia no solo se aprende mas sino tambien mas rapido.Me explico: si a uno que controla mucho de GM le aparece un nuevo problema o duda,dispone de muchos recursos para llegar a tal solucion.
Pero en cambio,es normal que uno que acaba de llegar (yo mismo ;) ) cuando se le presenta un problema o duda no disponga de esos conocimientos y aunque este leyendo claramente la solucion a su problema no sepa verla o nisiquiera sepa como cogerla....y en ese punto te doy la razon...hay que tirar muchisimo mas de manual...pero la diferencia es que cuando uno que controla lee el manual...entiende basicamente todo lo que lee...no se tio....no ta pasao?...abrir un manual de algo que desconoces totalmente y no entender ni una sola palabra...aun estando en tu idioma natal....pues ahi voy...hay que entender que la gente que no sabe(de lo que sea) tiene dos factores en contra 1-no saber y 2- no saber interpretar muchas veces lo que se tiene delante.Y esos dos factores van creciendo progresivamente...cada vez se mas y cada vez aprendo mas rapido.Jejeje que chapa....ten paciencia con los que no saben.Y quiero recalcar que en ninguno de mis posts he puesto que quiero que alguien me copie y pegue un codigo en concreto.Mi intencion no es hacer un juego de guerra por turnos.Mi intencion es aprender gm haciendo un juego de guerra por turnos.El juego ?te soy sincero? es lo de menos.No hago un video juego con ansias para luego dedicarle horas a jugar.Madre mia.Con los juegacos que hay en el mercado seria absurdo pensar que hago un videojuego con el fin de jugarlo.Es mas bien con el fin de terminarlo y pasar a otra cosa.Te hare caso y,(aunque no se juega con raton) no tirare de tu codigo.Seguire buscando y leyendo cosas que aunque cada vez entiendo mas,muchas me suenan a chino jejejeje.Basicamente por que no tengo prisa.Creeme te diria q casi me he leido las 96 paginas de foros que hay aqui...pero metete tu en un foro de fisica astronuclear (por poner un ejemplo raro ;) ) leetelo y a ver si te queda algo claro ;) en el fondo me alegra que pudieramos enderezar el lio este de discusion absurda ;) salud a todos
Totalmente de acuerdo.Me reitero y te pido disculpas. :-[
?Qu? es exactamente lo que quieres que haga el personaje? ?Que se mueva automaticamente sin salirse de su radio de alcance? ?Y de ser asi que direccion debe tomar?
Procura hacer una buena explicaci?n de tu duda al principio aunque sea extensa pero completa para pr?ximas dudas.
Saludos y lo dicho!
;)
a ver...mi juego...basicamente ahora es como un puzzle en la que estan todas las fichas desperdigadas y poco a poco voy juntandolas.Mi intencion es que en cada uno de los turnos aprezca un sprite(que ya tengo hecho) que es un circulo de 100pxls y que el jugador pueda moverse por ese circulo con las teclas wasd libremente hasta que pulses enter y pases turno.con la intencion,imaginate,de ,es vista topdown,y la intencion es que en tu turno puedas por ejemplo asomarte por una esquina,disparar y volver a esconderte y terminar turno.Yo en la room solo he puesto dos soldados(la intencion es 12 vs 12)los cuales los dos son aliados,porque no quiero liarme con la IA hasta que no tenga todo hecho.Les puesto vidas,municion,medicinas(para 4 futuros medicos q habran en el 12 vs 12 final)he puesto cajas donde recargar municion y otras donde recargar medicinas.Y mas o menos todo esto ya tiene forma.Basicamente juraria que es lo ultimo antes de colocar el resto de soldados y empezar con la IA.Basicamente ahora tengo que irme y tal osea que me niego en rotundo que me pegues aqui un codigo de la hostia con la solucion.me he mirado tu ejemplo y aunque no es lo que busco puedo ver cosas en el que me seran de ayuda.Un saludo
Q tal as??
Te dejo un ejemplo mas 8)
primero agradecer toda la ayuda y los ejemplos que hebeis hecho.Con la intencion, no solo de hacerlo,sino de saber que es lo que estoy haciendo he decidido ir avanzando pasito a pasito para saber bien bien donde estoy y cual es el siguiente paso.Bueno pues mirando los ejemplos y akgo de manual he hecho esto.
steep
[gml]if global.turno=1 and vida1a1 > 0{
instance_create(xstart,ystart,zona100)
if point_distance(xstart,ystart,lider_1a1.x,lider_1a1.y)<35
keyW=keyboard_check(ord("W"))
keyS=keyboard_check(ord("S"))
keyA=keyboard_check(ord("A"))
keyD=keyboard_check(ord("D"))
keyQ=keyboard_check(ord("Q"))
keyE=keyboard_check(ord("E"))
keyShift=keyboard_check(vk_shift)
keySpace=keyboard_check(vk_space)
keyEnter=keyboard_check(vk_enter)
if(keyW) //avanzar
{
speed=1;}
else
if(keyS) //retroceder
{
speed=-1;}
else
speed =0
if(keyA){ //rotar izquierda
direction+=2
image_angle=direction
}
if(keyD){ //rotar derecha
direction-=2
image_angle=direction
}
if keyboard_check_pressed(vk_space){
if balas>0{bala=instance_create(x,y,Bala) balas-=1
bala.direction=direction
bala.image_angle=direction
disparos=instance_create(x,y,disparo)
disparos.direction=direction
disparos.image_angle=direction
}
}
if keyboard_check_pressed(vk_enter) {global.turno+=1 keyboard_clear(vk_enter)}
if global.turno>global.maxturno {global.turno=1}
}
else {speed=0}
if vida1a1<=0 {instance_destroy() a=instance_create(x,y,muerto1a1)a.turno=1}
else
if point_distance(xstart,ystart,lider_1a1.x,lider_1a1.y)>35 {speed=0}[/gml]
se que no esta bien hecho pero ya empiezan a pasar cosas parecidas a lo que quiero y entiendo porque pero aun me debato cual es la solucon :-[
lo primero que pasa pero que no pasa como debiera ser es que efectivamente cuando es el turno de este soldado aparece el circulo (zona100) y soy consciente que he puesto que aparezca en x.start e y.start del lider_1a1 con lo cual siempre aparece en el mismo sitio.....bueno es un mal menor porque intuyo que no estoy muy lejos de la solucion para esto (la esperanza es lo ultimo que se pierde)
llegados a este punto mi unica intencion fue comprobar si efectivamente alejando al lider_1a1 de x.start e y.start sucedia algo y a?adi las dos lines de if point_distance(xstart,ystart,lider_1a1.x,lider_1a1.y)<35 esta al inicio para que fuera la condicion para poder moverse
if point_distance(xstart,ystart,lider_1a1.x,lider_1a1.y)>35 {speed=0} y esta al final...en ese momento pense a modo de comprobacion ponerle el speed a cero y efectivamente se para.El problema esta en que como sigue estando a una distancia mayor de 35 el speed siempre va a ser cero y no me deja moverme hacia atras.Puedo rotar ,disparar y pasar turno....bueno pues ahi estoy...intentare buscar solucion a mis dos peque?as dudas y hsasta no conseguirlo no seguire avanzando....os lo adjunto pa que veais la que estoy liando jajajaja salud y gracias mil.
he intentado esto pero tampoco funciona...cuando el objeto lider_1a1 esta mas lejos de 35 de x.tart e y.start sigue dejandome total libertad de movimientos y no va a x.previous e y.previous :'(
[gml]if point_distance(xstart,ystart,lider_1a1.x,lider_1a1.y)>35 {x=xprevious;} {y=yprevious;}[/gml]
Ahora si espero que te sirva este nuevo ejemplo
Ahora si perfecto 3dgeminis....claro no habia caido en darle speed=1 mientras exista colision con zona100 y sino pues speed=0...muy buena me sirvio de mucho.mil gracias