我正在尝试制作双棒射击游戏,但我无法使用正确的模拟棒以正确的方向拍摄。这是我将武器放在播放器顶部并旋转的代码。这一切都很好,只需要知道如何获得正确的角度,并朝这个方向发射子弹。
//set depth
depth = -y + obj_player.y_off_set - 1;
//analog left stick face direction
var h_point = gamepad_axis_value(0, gp_axisrh);
var v_point = gamepad_axis_value(0, gp_axisrv);
if ((h_point != 0) || (v_point != 0))
{
var pdir = point_direction(0, 0, h_point, v_point);
var dif = angle_difference(pdir, image_angle);
image_angle += median(-20, dif, 20);
}
//flips gun when turning
if(gamepad_axis_value(0, gp_axisrh) < -0.5)
{
image_yscale = -1;
}else if (gamepad_axis_value(0, gp_axisrh) > 0.5)
{
image_yscale = 1;
}
//fireing
fire = gamepad_button_check_pressed(0, gp_shoulderr) && alarm[0] <= 0;
if(fire)
{
var face = point_direction(0, 0, gp_axisrh, gp_axisrv);
var p = instance_create(x, y, obj_projectile);
var xforce = lengthdir_x(20, face*90);
var yforce = lengthdir_x(20, face*90);
p.creator = id;
with (p){
physics_apply_impulse(x, y, xforce, yforce);
}
答案 0 :(得分:0)
因为这个问题已经有几个月了,我想你找到了问题的解决方案,但希望这个答案可以帮助其他人解决这个问题。
根据您提供的代码段,如果您从lengthdir_函数中删除 * 90 ,您的代码应该可以正常工作。
以下是我在游戏中编写的代码,用于使用正确的模拟摇杆进行360度射击(此代码位于Player对象的步骤事件中):
if (shooting) {
bullet = instance_create(x, y, Bullet);
with (bullet) {
haxis = gamepad_axis_value(0, gp_axisrh);
vaxis = gamepad_axis_value(0, gp_axisrv);
dir = point_direction(0, 0, haxis, vaxis);
physics_apply_impulse(x, y, lengthdir_x(50, gp_axisrh), lengthdir_y(50, dir));
}
}
GameMaker社区论坛上的这个particular thread非常有用,因为我研究了如何在游戏中解决这个问题。