这期视频主要讲了枪和子弹的实现。
枪的绘制
/// @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);
这里使用的是内置的属性 speed 和 direction。
然后要在 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时,自动执行如下代码。
dir 与 flipped 分别是方向和鼠标在人物左右的判断,gun_x 是枪口位置的横坐标。
x_offset 和 y_offset 是枪口和枪位置的偏移量(“枪口”实际上并不存在,20是对枪长度的粗略估计)。
然后使用 instance_create_layer 创建子弹,四个参数依次为(创建位置横坐标,创建位置纵坐标, 所在的图层,创建的对象)。
但是仅仅是这样的话,子弹会被挡住,所以这里要调整子弹的深度。
depth = -1;
当子弹撞上墙时,要销毁子弹,所以这里创建一个和 o_solid 的 collision 事件,写入如下代码:
instance_destroy();
至此,枪和子弹实现完毕。
原文地址:https://www.cnblogs.com/2ufun/p/12384225.html
时间: 2024-08-29 21:33:47