Olá, eu não tenho certeza se entendi o que você quer, mas talvez usar o draw_sprite_pos possa te ajudar, nele você pode escolher as 4 pontas de sua imagem (iniciando pela superior esquerda), assim você pode fazer com que ela aumente para cima em uma velocidade especifica e para baixo em outra velocidade.
Vou dar a sintaxe dela e depois um exemplo do que eu ACHO que você quer
sintaxe
draw_sprite_pos(sprite, subimage,x1, y1, x2, y2, x3, y3, x4, y4, alpha) o 1 representa o canto superior esquerdo da imagem, o 2 o canto superior direito, o 3 (este sempre confunde) é o canto inferior direito (sentido horário!) e o 4 o canto inferior esquerdo
Aqui a documentação do game maker explicando melhor
Eu acho que você quer que ele aumente para cima e para baixo sem um depender do outro, correto?
Vou dar o modelo de código aqui. (tudo isso no draw event)
Código: Selecionar todos
var xx = x - sprite_xoffset; //aqui estou trazendo meu x para o canto esquerdo da sprite, independente da origem definida
var yy = y - sprite_yoffset; //mesma coisa, só que e aqui estou levando para o topo
var ytopo = 0; //vai controlar o topo de minha imagem
var xtopo = 0; //Vai controlar o lado esquerdo
var ybase = 0; //vai controlar a base da minha imagem
var xbase = 0; //Vai controlar o lado direito
draw_sprite_pos(sprite_index, image_index, xx, yy-ytopo,
// 1
xx+sprite_width, [size=100]yy-ytopo, [/size]
[size=100]/[/size][size=100]/ 2 aqui cuidei da parte superior da imagem, você pode e eu aconselho a dar estas quebras no código, fica mais fácil de entender[/size]
[size=100][/size]
[size=100]xx+sprite_width, (yy+sprite_height)+ybase [/size]
[size=100]// 3 aqui eu estou dando o sprite height também porque tenho que levar a minha sprite até onde seria a base dela[/size]
[size=100][/size]
[size=100]xx, (yy+sprite_height)+ybase [/size]
[size=100]// 4 mesma coisa[/size]
[size=100]1); //alpha[/size]
vou colocar o código em uma linha para ficar mais "limpo"
Código: Selecionar todos
draw_sprite_pos(sprite_index, image_index, xx, yy-ytopo, xx+sprite_width, yy-ytopo, xx+sprite_width, (yy+sprite_height)+ybase, xx, (yy+sprite_height)+ybase, 1);
Você vai notar que eu criei o xbase e o xtopo e nunca os usei, é porque eu só estou dando o exemplo vertical, se você quiser que ela mude horizontalmente você vai precisar inserir estas variáveis nos valores de x, lembrando que se é para ir para a esquerda o valor é negativo e a direita o valor é positivo.
Fiz isso, mas esse comando por si só não faz nada, o que eu faço agora é uma condicional para determinar o que vai aumentar.
Código: Selecionar todos
if (keyboard_check(ord("X"))) ytopo++;
if (keyboard_check(ord("Y"))) ybase++;
Pode usar o incremento aqui porque eu usei subtração no draw_sprite_pos
Com este código quando você apertar o x sua sprite vai aumentar para cima e só para cima e quando você apertar o y ela vai aumentar só para baixo, fiz agora de cabeça então talvez tenha algum erro, qualquer coisa é só reclamar que eu tento corrigir.
Espero ter ajudado =)