GameMaker Studio 2—制作横版射击游戏教程-HeartBeast 短期小结2

这期视频主要讲了枪和子弹的实现。

枪的绘制

/// @description Draw the gun
var dir = point_direction(x, y, mouse_x, mouse_y);
var flipped = (mouse_x > x) * 2 -1;

//draw the player
draw_sprite_ext(s_player, 0, x, y, 1, 1, 0, image_blend, image_alpha);

//draw the gun
draw_sprite_ext(s_gun, 0, x - 4*flipped, y-sprite_height/2, 1, flipped, dir, image_blend, image_alpha);

 首先我们要把枪画出来,而且要实现枪和人物随鼠标转动。

这里先将人物和鼠标连线的角度(即鼠标的方向)赋值给 dir ,然后定义一个 flipper 变量,用于检测鼠标在人物的那一边。

最后用 draw_sprite_ext 方法绘制人物和枪,注意,这里两者的顺序不可以改变,否则人物会覆盖住枪。

draw_sprite_ext 的参数依次为(绘制的精灵,绘制图像的编号,绘制位置的横坐标,绘制位置的纵坐标,横向缩放比,纵向缩放比,方向, 混合精灵的颜色,透明度)。

为了使枪的位置更合理,横坐标和纵坐标做了相应的调整,最后两个参数使用默认设置。

子弹的实现

首先在子弹的 create 事件里写入如下代码:

speed = 5;
direction = point_direction(x, y, mouse_x, mouse_y);

这里使用的是内置的属性 speeddirection

然后要在 o_player 里新建一个全局的 Left Preesed 事件用于创建子弹,代码如下:

var dir = point_direction(x, y, mouse_x, mouse_y);
var flipped = (mouse_x > x) * 2 -1;
var gun_x = x - 4*flipped;
var x_offset = lengthdir_x(20, dir);
var y_offset = lengthdir_y(20, dir);
	
instance_create_layer(gun_x + x_offset, y- sprite_height/2 + y_offset, "Instances", o_bullet);

当计时器到达0时,自动执行如下代码。

dirflipped 分别是方向和鼠标在人物左右的判断,gun_x 是枪口位置的横坐标。

x_offsety_offset 是枪口和枪位置的偏移量(“枪口”实际上并不存在,20是对枪长度的粗略估计)。

然后使用 instance_create_layer 创建子弹,四个参数依次为(创建位置横坐标,创建位置纵坐标, 所在的图层,创建的对象)。

但是仅仅是这样的话,子弹会被挡住,所以这里要调整子弹的深度。

depth = -1;

当子弹撞上墙时,要销毁子弹,所以这里创建一个和 o_solidcollision 事件,写入如下代码:

instance_destroy();

至此,枪和子弹实现完毕。

猜你喜欢

转载自www.cnblogs.com/2ufun/p/12384225.html