在枪管的产卵子弹

时间:2014-10-10 21:16:17

标签: rotation game-maker

我正在制作一个自上而下的射击游戏,玩家的枪从物体的坐标偏移。我正在使用GameMaker:Studio,因此x和y坐标是对象的中心。图像的偏移量在此处设置:

bullet_offset_x = 30;
bullet_offset_y = 28;

以下是射击枪的代码:

var xpos = x + (bullet_offset_x * cos(degtorad(direction))) - (bullet_offset_y * sin(degtorad(direction)));
var ypos = y + (bullet_offset_x * sin(degtorad(direction))) + (bullet_offset_y * cos(degtorad(direction)));

var flash = instance_create(xpos, ypos, obj_flash);

with (flash){
    direction = other.direction;
    image_angle = other.direction;
}

我正在使用以下公式放置枪口闪光灯:

x'= x cos(角度) - y sin(角度)

y'= x sin(角度)+ y cos(角度)

因此:

xpos = x + x'和ypos = x + y'

然而,当我运行代码时,枪口闪光灯在角度为0/360时正确定位,否则会关闭。我在计算这个错误吗?

IMAGES:

正确

Correct

不正确的

Incorrect Incorrect

2 个答案:

答案 0 :(得分:5)

您需要使用lengthdir_xlengthdir_y功能,例如:

var xpos = x + lengthdir_x(offset_distance, offset_angle + image_angle); // or direction
var ypos = y + lengthdir_y(offset_distance, offset_angle + image_angle);

var flash = instance_create(xpos, ypos, obj_flash);

flash.direction = direction;
flash.image_angle = direction;

小例子here

要计算要替换为公式的值,可以使用this程序。 最初它是用俄语制作的,但我把它翻译成英文。我的英语很糟糕,但我希望你能理解它。

带偏移的

更新 Example

var delta_x = 60;
var delta_y = -70;
var angle = point_direction(0, 0, delta_x, delta_y);
var distance = point_distance(0, 0, delta_x, delta_y);

var xpos = x + lengthdir_x(distance, image_angle + angle);
var ypos = y + lengthdir_y(distance, image_angle + angle);
var obj = instance_create(xpos, ypos, obj_flash);
obj.image_angle = image_angle;

答案 1 :(得分:0)

当你的精灵的角度为0时,你的枪口相对于精灵仍然会以invtan(28/30)的角度闪烁。因此,闪光灯必须相对于精灵旋转放置的角度可由

给出
flashRotation = spriteRotationDegrees - invtan(28/30) \\you can change this to radians

找到后,可以通过以下方式找到这些职位:

var x_pos = sprite_x_pos + Math.Sqrt(28^2 + 30^2)cos(flashRotation);
var y_pos = sprite_y_pos + Math.Sqrt(28^2 + 30^2)sin(flashRotation);

闪光灯的实际旋转角度(它指向的方向)与精灵的角度相同。 您可能需要使用flashRotaion方程式,具体取决于计算为正向旋转的方式。