Buenas, pues tengo un problema, la view es de 480 por 800 y la view sigue al personaje, al crear la pausa hago una captura, pero la captura me la hace al principio de la pantalla, este es el codigo:
sprite_create_from_surface(application_surface, 0, 0, room_width, room_height, false, false, 0,0);
Por eso he puesto esto pero no funciona tampoco.
sprite_create_from_surface(application_surface, view_xview, view_yview, room_width, room_height, false, false, 0,0);
Alguien sabe como hacer la captura que siga al personaje, MUCHAS GRACIAS
sprite_create_from_surface
Crea un sprite copiando un área de una superficie.
Sintaxis:
sprite_create_from_surface (índice, x, y, w, h, removeback, smoot, xorig, yorig);
Argumento Descripción
índice El índice de la superficie a crear a partir de.
x La posición x copiar.
y La posición y copiar.
w La anchura de la zona que va a copiar (desde la posición x).
h La altura de la zona que va a copiar (de la posición y).
removeback Indica si va a hacer todos los píxeles con el color de fondo (píxel inferior izquierda) transparente.
smoot Indica si desea suavizar los bordes.
xorig Indica la posición x del origen en el sprite.
yorig Indica la posición y del origen en el sprite.
Devoluciones: Bienes
Descripción
Con esta función se puede crear un sprite de una superficie previamente inicializado. El coordenadas X e Y que de entrada son en relación con la posición (0,0) de la superficie (la esquina superior izquierda) y no la ventana de juego, ni la vista si tiene uno activo. Los argumentos de anchura y altura se expresan en píxeles y definen la anchura y la altura de la parte de la superficie a utilizar. Ajuste del argumento "removeback" a verdad eliminará un color del sprite, marcando la parte inferior izquierda del pixel del sprite para el color de allí y luego usar eso como el color que desea eliminar. Si elige la opción "removeback", es posible que también desee Game Maker para suavizar los bordes de sprite estableciendo el argumento "suave" a verdad . Todo esto hace es crear un borde semi-transparente en los bordes de sprite después de que haya tenido su fondo eliminado. Por último, también puede especificar la x e y origen para el sprite. Este es el punto en el que el sprite se "fija" en la instancia que lo utiliza, y siempre se calcula como respecto a la esquina superior izquierda de 0,0 sub-imagen de un duende. Así, por ejemplo, un sprite que es de 32 x 32 píxeles con estos valores se ajustan a (16,16) tendrán su origen en el centro. Por defecto, todos los nuevos sprites tienen sus cuadros delimitadores calculan automáticamente (el Bbox exacto dependerá de la tamaño y transparencia del sprite), sin embargo puede que desee personalizar este, en cuyo caso también se debe utilizar la función sprite_collision_mask . NOTA: Cuando se crea un sprite en Game Maker con este método hay que acordarse de quitar de nuevo (con sprite_delete ) cuando ya no sean necesarios, de lo contrario existe el riesgo de una pérdida de memoria que se ralentizará y eventualmente bloquear el juego.
Ejemplo:
resaca var;
resaca = surface_create (32, 32);
surface_set_target (surf);
draw_clear_alpha (c_black, 0);
draw_sprite (spr_Body, 0, 0, 0);
draw_sprite (spr_Clothes, 0, 0, 0);
draw_sprite (spr_Hair, 0, 0, 0);
spr_custom = sprite_create_from_surface (surf, 0, 0, 32, 32, 1, 1, 16, 16);
surface_reset_target ();
surface_free (surf);
El código anterior crea una superficie y almacena sus índices en el "surf" local variable. A continuación, se dirige a esa superficie, lo borra y dibuja varios sprites en la parte superior de la otra. Finalmente se crea un nuevo objeto móvil a partir de la imagen compuesta dibujado en la superficie y su índice asigna a "spr_Custom" antes de liberar la memoria utilizada por la superficie.
Cita de: pacne en Marzo 22, 2015, 08:38:09 PM
sprite_create_from_surface(application_surface, view_xview, view_yview, room_width, room_height, false, false, 0,0);
OJO: Si estás usando views, NO deberías usar
room_width,
room_height. Las vistas tienen sus propias variables que indican ancho y alto, esas son las variables que hay que usar para indicar las medidas del sprite. El ancho y alto de la habitación no tienen nada que ver en este caso.
http://docs.yoyogames.com/source/dadiospice/002_reference/windows%20and%20views/views/index.html (http://docs.yoyogames.com/source/dadiospice/002_reference/windows%20and%20views/views/index.html)
Lo que pasa es que sprite_create_from_surface lo igualo a una variable global, todo funciona bien, pero cuando enchufo el programa game maker studio me da un error sprite_delete, pero no me dice nada de errores cuando lo pruebo en el run the game. alguna solucion?
Gracias
Da más detalles, como qué dice exactamente el error, en qué evento o momento llamas a sprite_delete, etc. Si el resultado de la función lo guardas en una variable, es raro que no escribas así el código, y que sólo escribas la función. Por favor trata de dar TODA la información de una vez, así es más fácil entender qué pasa.
Suposición: Probablemente estás llamando a sprite_delete en un momento o evento en el que el sprite ya no existe (por ejemplo, recurrentemente en STEP). En tal caso, hay que usar la función
http://docs.yoyogames.com/source/dadiospice/002_reference/game%20assets/sprites/sprite_exists.html (http://docs.yoyogames.com/source/dadiospice/002_reference/game%20assets/sprites/sprite_exists.html) para comprobar si el sprite existe o no
el error lo tengo en instance_destroy(obj_mensaje_pause), y no se porque, puede ser este en el obj_mensaje_pause
if keyboard_check_pressed(vk_space)
{
global.pause = 0;
instance_activate_object(object8);
instance_destroy(obj_mensaje_pause);
sprite_delete(global.spr_captura);
}
Ahora no me da error, gracias de todos modos, es asi:
if keyboard_check_pressed(vk_space)
{
global.pause = 0;
instance_activate_object(object8);
sprite_delete(global.spr_captura);
with (obj_mensaje_pause)
{
instance_destroy();
}
}