主要相比Unity3D,GM2适合单人新人进行开发,但GM2需要购买(248),国内社区不活跃,资料少。
这是一个国外友人制作的类星露谷游戏。
可以在这里找到一些免费的贴图https://opengameart.org/。
Sprites就是代表一个贴图,Objects是贴图的功能(包括控制贴图的行为等)。把objects拖入room,那么就实例化了它,可以按F5运行游戏看到结果。
object0:Step指的就是对象每一帧都去判断,我们写下代码判断按键实现Sprites移动。
在Options的Main中可以设置游戏帧数,一般默认为60就可以了。
如果有些函数你不知道如何调用,在函数上按下鼠标中键(有的鼠标没这个键),可以看到帮助文档。
spd = 2
if(keyboard_check(vk_left)){
x = x - spd
}
if(keyboard_check(vk_right)){
x = x + spd
}
if(keyboard_check(vk_up)){
y = y - spd
}
if(keyboard_check(vk_down)){
y = y + spd
}
你可以将速度设为一个变量,这样就不用每一项都进行修改了。
/// @description Insert description here
// You can write your code in this editor
spd = 2
input_left = keyboard_check(vk_left)
input_right = keyboard_check(vk_right)
input_up = keyboard_check(vk_up)
input_down = keyboard_check(vk_down)
if(input_left){
x = x - spd
}
if(input_right){
x = x + spd
}
if(input_up){
y = y - spd
}
if(input_down){
y = y + spd
}
if(input_left or input_right){
}else{
}
这样更方便在后面少些一些代码,但这不是必须的。其实这里有个问题,如果你同时按下2个键,那将不是你想要的效果,你可以试试。
那么碰撞如何检测呢?简单的思想就是如果移动后物体的XY和另一物体的XY接触了,那么就不移动。
moveX = 2;
moveY = 2;
if(place_meeting(x + moveX,y,object1)){
moveX = 0;
}
if(place_meeting(x,y + moveY,object1)){
moveY = 0;
}
x+=moveX;
y+=moveY;
object1是你要检测的碰撞目标。
改变Object的名字也很重要,一个好的系统你需要好的命名规则。
这样的碰撞检测有一个问题,就是如果移动速度过快,在接触碰撞时有一个大的间隙。
那么怎么办?可以把直接移动x个单位改成移动x次1个单位。
moveX = 2;
moveY = 2;
if(place_meeting(x + moveX,y,object1)){
repeat(abs(moveX)){
if(!place_meeting(x+sign(moveX),y,object1)){
x+=sign(moveX);
}else{
break;
}
}
moveX = 0;
}
x+=moveX;
大家可以看到,在2D游戏中,一个移动的NPC其实就是NPC移动方向的图片连续展示,在肉眼看来就是在连续移动。
通过这里导入。https://github.com/makrohn/Universal-LPC-spritesheet
视角就是实际用户实际显示的画面,可能要比实际的地图小。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。