Buenas! Pues uso sprite_get_texture para usarla en walls 3d, y mi pregunta es, cómo puedo cortar esa textura obtenida a partir de un sprite, por ej darle 4 coordenadas y que me haga un recorte rectangular. Con eso y un bucle podría, por ejemplo, dibujar un wall aparentemente plano que se vea curvo, haciendo muchos subwalls. Para eso necesitaría poder partir por código la textura, a mano sería para morirse y poco eficiente.
PD: Mirando un poco he visto que con surfaces podría hacerse, pero no tengo ni idea. Estoy mirando tutoriales, si lo logro aviso para cerrar
no entiendo bien tu pregunta, deseas un muro pero que sea curvo?o poner una textura que de apariencia curva a dicho muro?
Por ejemplo dividir un muro en 10 partes y dibujar cada parte desplazada ligeramente. Con eso obtendría un muro diagonal. Jugando con eso podría dar curvas y todo tipo de efectos, por ello necesito poder partir un sprite en muchas partes rectangulares por código. Las surfaces no se llevan bien con el 3D, voy haciendo pruebas pero por ahora nada
Buenas, después de mucho esfuerzo lo he encontrado :D
He hecho un script, ponlo en el evento <Create>:
///new=sprite_create_from_sprite(left,top,width,height,sprite)
var left, top, width, height, sprite, surface, nuevo_sprite;
left=argument0
top=argument1
width=argument2
height=argument3
sprite=argument4
surface = surface_create(width,height);
surface_set_target(surface);
draw_sprite_part(sprite,0,left,top,width,height,0,0);
surface_reset_target();
nuevo_sprite = sprite_create_from_surface(surface,0,0,width,height,0,0,0,0,0,0);
surface_free(surface);
return nuevo_sprite;
Lo he probado en GM7 y funciona perfectamente (no tengo GM8 pero supongo que irá también), lo único que creo que en GM8 la función sprite_create_from_surface tiene 2 argumentos menos si es el caso tendrás que quitarle 2 ",0" al final.
Saludos!
Gracias! He creado un script con ese codigo, lo ejecuto en create, rellenando un array para guardar cada una de las texturas recortadas, y así en draw dibujo cada uno. El problema es que se ve todo el sprite en negro. Será eso de que estando el 3D activado no se pueden utilizat surfaces?
Yo he comprobado el código en un juego en 3D para ver si funcionaba, y me iba bien.
Como no hayan cambiado algo entre GM7 y GM8 y por eso a tí no te va...
De todas formas prueba a poner draw_set_color(c_white);
antes de dibujar la wall en el evento <Draw>.
A ver si te funciona y puedes seguir con tu juego! :)
pues si, sigue sin ir... por ahi dice
Las superficies no funcionan correctamente en modo 3D. Puedes usarlas mientras no estés en modo 3D (llamando a la función d3d_end() antes de usarlas) pero una vez que empieces a usar el modo 3D de nuevo las superficies se destruirán automáticamente.
tambien he probado hacer un d3d_end y un d3d_start, y entre medio asignar al array las texturas obtenidas pero nada...
Bueno, gracias por todo, pero creo que será mejor hacerlo manualmente. Hacerlo así me obligaria a ir por rectangulos, y quedaria mas realista hacerlo libremente. Algo mas de trabajo pero si lo organizo bien quedará guay. Creo que mejor cerrar esto, pronto vere que tal va :D
Mmmm, el Doomed Dungeon lo creé con el Game Maker 8.0, y para usar surfaces en 3D tuve que echar mano de una extensión: http://gmc.yoyogames.com/index.php?showtopic=454468
Eso sí, con el 8.1 no haría falta, ya que los de YoYo pusieron soporte para surfaces en 3D.
el codigo para en muro diagonal es el siguiente.
una pared en este sentido /
d3d_draw_wall(x-16,y+16,0,x+16,y-16,32,textura,1,1);
en este otro \ seria
d3d_draw_wall(x-16,y-16,0,x+16,y+16,32,textura,1,1);
una screen para que veas como se ve
(http://i178.photobucket.com/albums/w266/Haseo001_2007/img_zpsd78a7656.jpg) (http://s178.photobucket.com/user/Haseo001_2007/media/img_zpsd78a7656.jpg.html)