Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Olqaqse93 en Abril 29, 2020, 09:05:09 PM

Título: mantener un personaje ragdoll de pie
Publicado por: Olqaqse93 en Abril 29, 2020, 09:05:09 PM
 Buenas :) tengo un problema y es que tengo un personaje tipo ragdoll pero se desploma en vez de mantenerse de pie ,lo veo lógico porque estoy usando las físicas de el propio gms, osea tengo activadas las físicas en los objetos, intente usar la función de physics_apply_force() en la cabeza para que le empujara para arriba pero cuando se cae ya no se vuelve a levantar, e probado muchas cosas pero nada me funciona ¿que puedo hacer? :'(
Título: Re:mantener un personaje ragdoll de pie
Publicado por: Clamud en Abril 30, 2020, 03:15:42 AM
Interesante. ¿Has creado el personaje con código o qué método has empleado?
Podrías aplicar una fuerza de rotación para mantenerlo vertical.
Título: Re:mantener un personaje ragdoll de pie
Publicado por: Olqaqse93 en Abril 30, 2020, 03:21:03 PM
el personaje en si es código ,solo tengo dos sprites el del cuerpo y el de al cabeza y para hacer las extremidades he usado el mismo sprite pero horizontal, así tenia un stickman estilo  ragdoll.
En un objeto a parte de la cabeza y del cuerpo he creado un objeto llamado "obj_ragdoll_create" y puesto un create que lo que hace es crear el personaje y unirlo  con la función de physics_joint_revolute_create()

aquí esta el código por si alguien lo quiere:

//creacion de cabeza
cabeza = instance_create(x, y - 48, obj_ragdoll_cabeza);

//creacion de cuerpo
cuerpo1 = instance_create(x, y - 16, obj_ragdoll_cuerpo);
cuerpo2 = instance_create(x, y + 16, obj_ragdoll_cuerpo);
//union entre cabeza y cuerpo,
physics_joint_revolute_create(cuerpo1, cuerpo2, x, y, 0, 0, 0, 0, 0, 0, 0);
physics_joint_revolute_create(cuerpo1, cabeza, x, y - 32, 0, 0, 0, 0, 0, 0, 1);

plus = 12; //margen entre las extremidades y el cuerpo

//creacion de pierna derecha
pierna1 = instance_create(x + 16 + plus, y + 32, obj_ragdoll_arti);
pierna2 = instance_create(x + 48 + plus, y + 32, obj_ragdoll_arti);
//union entre pierna derecha y cuerpo
physics_joint_revolute_create(pierna1, cuerpo2, x + plus, y + 32, 0, 0, 0, 0, 0, 0, 0);
physics_joint_revolute_create(pierna1, pierna2, x + 32 + plus, y + 32, -150, 150, 1, 0, 0, 0, 0);

//creacion de pierna izquierda
pierna1 = instance_create(x - 16 - plus, y + 32, obj_ragdoll_arti);
pierna2 = instance_create(x - 48 - plus, y + 32, obj_ragdoll_arti);
//union entre pierna izquierda y cuerpo
physics_joint_revolute_create(pierna1, cuerpo2, x  - plus, y + 32, 0, 0, 0, 0, 0, 0, 0);
physics_joint_revolute_create(pierna1, pierna2, x - 32  - plus, y + 32, -150, 150, 1, 0, 0, 0, 0);

//creacion de brazo derecho
brazo1 = instance_create(x + 16 + plus, y - 32, obj_ragdoll_arti);
brazo2 = instance_create(x + 48 + plus, y - 32, obj_ragdoll_arti);
//union brazo derecho y cuerpo
physics_joint_revolute_create(cuerpo1, brazo1, x + plus, y - 32, 0, 0, 0, 0, 0, 0, 0);
physics_joint_revolute_create(brazo1, brazo2, x + 32 + plus, y - 32, -150, 150, 1, 0, 0, 0, 0);

//creacion de brazo izquierdo
brazo1 = instance_create(x - 16 - plus, y - 32, obj_ragdoll_arti);
brazo2 = instance_create(x - 48 - plus, y - 32, obj_ragdoll_arti);
//union brazo izquierdo y cuerpo
physics_joint_revolute_create(cuerpo1, brazo1, x - plus, y - 32, 0, 0, 0, 0, 0, 0, 0);
physics_joint_revolute_create(brazo1, brazo2, x - 32 - plus, y - 32, -150, 150, 1, 0, 0, 0, 0);

instance_destroy();//se autodestruye
Título: Re:mantener un personaje ragdoll de pie
Publicado por: Olqaqse93 en Abril 30, 2020, 03:29:34 PM
que quieres decir con la fuerza de rotación ?
no quiero que el personaje se quede tieso lo que quiero es que el personaje se mueva como en este video https://www.youtube.com/watch?v=8VXe61YshJ8
Título: Re:mantener un personaje ragdoll de pie
Publicado por: Clamud en Mayo 02, 2020, 07:32:36 PM
Aún no le he intentado, pero tal vez se puede hacer con el tipo de unión "weld", para mantener las extremidades en ángulos relativos al torso, pero con un poco de flexibilidad.
Después aplicar algunas técnicas de los tutoriales sobre "physics platformers" para mantener el personaje en posición vertical.

Este ejemplo puede servir
https://marketplace.yoyogames.com/assets/520/physics-platformer-advanced
Título: Re:mantener un personaje ragdoll de pie
Publicado por: Olqaqse93 en Mayo 03, 2020, 01:18:37 PM
no encontré en el manual ninguna unión llamada "weld" ,si me pudieras escribir la función completa me harías un gran favor
Título: Re:mantener un personaje ragdoll de pie
Publicado por: Clamud en Mayo 06, 2020, 06:11:41 AM
La función es physics_joint_weld_create
Estoy empezando a probarla. Aquí un ejemplo (https://yal.cc/r/gml/?mode=2d&tabs_lz=NobwRAdghgtgpmAXGA6nANgYwPbwApQDmCANGDgCYLID0NABAMIBOcUALnPQKIBucEdgB1mQiCLF16ASwjTM0qOmkAvKM3owArhArYJEAA4ALAJ4BneeYD6Ad2zN0Fa5lYc4ACgCMNAKwAGAEoAbgMTCys7BydrQmYoXml2Uw9-EnpfEIMDbGtpCnoAXnoIbGwIOGD6OllzdigIBSgSrTheKDC8guLS8srqmlr6xsV6Q1ZEjtEIAA8i+i8A0OnTea9-f2WxAwAzaTni8MtMGz2Z9i1WFzdODxCB1zYNM4vWMLNj0-3XuGtzOHY1ioEEsyQ8Z3S-gAdJktkYPpEXpdfv9ATh0MpLOVYsxsFpDOD9ukvFlpkdEd9kX8AdYAEbYGZ-YxQQyeCEZNL0ABMQSqdB2DhgzVYmGGhC06HU2WmAo0Hmk802MnoAB4MlVpABqTXBQIDHTSDS+MbSOBqcwGEAGeg2+i5fLzIYNTC-R7uDxzTX0bw8+gAKhkgXSpnS2FpACtrCS+YMQcMmtbbeSTtYkVdabIKISZqGuvc6FBLIRoM9KW9prb6ImbdIdt6FQA+ej+egAMlbyrVmWr9CtFcrtoLcTghHU9ANfXM9GakqnTpGhZkgjgzHgFEUFv7A7GCJT4ewskBtgwzjdt0MXVz+RIPcrnu9Xl9AekeoAtPQAGyckPN4mcx-pDsSj-KSYiVgAvj2F4OsU9oUHCkHTAYrCshwHgAMyBJaPZ5HGjpxs6ro3J4t62vEui4NY5HEBhGzpAEQTpKRNrkXoMBUQ0NHoXR9AACwbEGdoRlGoEQJWyZfOcVIZro2bpLhdSiYh2wyvsjDMrI8wSamZZEWwtyidpaYojS6KYtI2JxHiBJnOpUCyMShm7pJPzUmiGkQEyLJsmpHnpOwzCtKJBYUAUhgHoIm5iEZunWFAoXWOFh7ZnZDkZPRTkRCmxlxQlSWCClfn0AAHDxsLvFlLlUvFzj5ewhX2RA6SlZyDGZZ8OlSVcNWJRF9W2UVvj0QJcJ0DJBTsMYXDGQYCnsPhdSEdc+meJynJhpGXLtRSXW-ONDVpXNokGAAxFQewVPQdRwIYBi1poeL-C4U2YAA1nSWjsOw2LjHA5j-FmMC0tY6BwDs7BYdMfZgbac0LfGenujAj2-DmD1aE9P4bSJcLic5nWuft7JHQh0piGdYOyFwFDxLYFUdfYjjODTUC2ECcC0lohAeD2dDhOznOEFRAhUMwcVQLStL0AAPrzND81QgvC7oK4uNgGLSFinmGPZzBTrLW47qYAtc8rotqzA+tywrHOm6wKtizgVzmMyrJW4bNtK-b5v7oe7swzafNmCbQve6rYZSwbAdGyHZuqy73lRRAIRgOBAC6QA).
Haz clic para agregar más bloques.