相关文章推荐
冲动的梨子  ·  SpringBoot如何正确接收FormDa ...·  6 月前    · 
聪明的手电筒  ·  vue Openlayers ...·  1 年前    · 
胆小的风衣  ·  请从代码实现的角度说明一个前后端分离的项目如 ...·  2 年前    · 
气宇轩昂的蜡烛  ·  如何使用sed删除模式行,如果下一行为空?·  2 年前    · 
完美的消炎药  ·  python连接打印机打印文档、图片、pdf ...·  3 年前    · 
小百科  ›  GameMakerStudio2初体验【1】开发者社区
GameMaker: Studio input 社区功能
玩篮球的南瓜
3 年前
轻吻晴雯

GameMakerStudio2初体验【1】

原创
前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
发布
首页
学习
活动
专区
圈层
工具
MCP广场
返回腾讯云官网
轻吻晴雯
首页
学习
活动
专区
圈层
工具
MCP广场
返回腾讯云官网
社区首页 > 专栏 > GameMakerStudio2初体验【1】

GameMakerStudio2初体验【1】

原创
作者头像
轻吻晴雯
修改 于 2019-09-02 11:54:41
修改 于 2019-09-02 11:54:41
2.3K 0 0
代码可运行
举报
文章被收录于专栏: 杂文共赏 杂文共赏
运行总次数: 0
代码可运行

GM2入门介绍

主要相比Unity3D,GM2适合单人新人进行开发,但GM2需要购买(248),国内社区不活跃,资料少。

主界面
主界面

这是一个国外友人制作的类星露谷游戏。

可以在这里找到一些免费的贴图 https://opengameart.org/。

Sprites就是代表一个贴图,Objects是贴图的功能(包括控制贴图的行为等)。把objects拖入room,那么就实例化了它,可以按F5运行游戏看到结果。

object0:Step指的就是对象每一帧都去判断,我们写下代码判断按键实现Sprites移动。

在Options的Main中可以设置游戏帧数,一般默认为60就可以了。

如果有些函数你不知道如何调用,在函数上按下鼠标中键(有的鼠标没这个键),可以看到帮助文档。

GM2移动与碰撞

代码语言: javascript
代码 运行次数: 0
运行
复制
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
}

你可以将速度设为一个变量,这样就不用每一项都进行修改了。

代码语言: javascript
代码 运行次数: 0
运行
复制
/// @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接触了,那么就不移动。

代码语言: javascript
代码 运行次数: 0
运行
复制
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个单位。

代码语言: javascript
代码 运行次数: 0
运行
复制
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;
 
推荐文章
冲动的梨子  ·  SpringBoot如何正确接收FormData多文件上传?_编程语言-CSDN问答
6 月前
聪明的手电筒  ·  vue Openlayers 自定义覆盖物addOverlay添加点击事件_mob6454cc63f2dd的技术博客_51CTO博客
1 年前
胆小的风衣  ·  请从代码实现的角度说明一个前后端分离的项目如何使用jquery的ajax技术、json数据传输格式、sql数据库查询语言,实现用户登录功能。请讲解数据的传输过程、前后端如何交互。 - CSDN文库
2 年前
气宇轩昂的蜡烛  ·  如何使用sed删除模式行,如果下一行为空?
2 年前
完美的消炎药  ·  python连接打印机打印文档、图片、pdf文件等_python调用打印机打印pdf_ersaijun的博客-CSDN博客
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号