经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 游戏设计 » 查看文章
<实用GMS:语言项目>笔记 介绍
来源:cnblogs  作者:禚晨晨  时间:2019/8/19 8:35:31  对本文有异议

前言

实习工作快一年了, 对于Unity引擎有一些了解. 最新的版本不知道2D体验怎么样, 但旧一些的版本明显是3D为主, 2D体验不是很好. 个人业余要做点小游戏的话, 2D还是用专门的2D引擎好一点, 盯上了Gamemaker. 浏览各种游戏引擎的时候评论区都是有捧有踩的, 真假难分, 还是亲身体验一下再说.
使用steam的desktop版, 当然网上的盗版能搜一大堆. 每次启动需要验证帐号还是挺烦的, 离线时不知道怎么才能运行
Gamemaker的学习方式主要有官网文档\youtube视频\indienova等
这里跟随一本书 来学习, 这本书是介绍使用GML语言创建游戏项目的入门书

书中使用的资源可以在 https://github.com/Apress/practical-gamemaker-studio 下载

介绍

跟随书中介绍, 可以创建一个点击物体的游戏(类似打地鼠)

...... GMS2和书中用的GMS的界面布局还是区别挺大的

创建一个新项目后, 界面右侧列出了资源类型, 第一感觉GMS更像一个游戏引擎+游戏框架的结合体

2D游戏的一些基本概念

  • sprite 用于在游戏中显示图形
  • room 游戏行为的容器(场景), 负责渲染\处理用户输入\播放音效等
  • sound 很明显, 声音
  • font 游戏中用到的字体.这里并不是一个独立的ttf等字体文件, 而是读取字体中的轮廓自动排版生成的texture
  • object 应该和unity的gameobject类似

obj_start_game 开始按钮的处理

跟随书中步骤创建了这些游戏资源, obj_start_gamecreate事件代码:

  1. ini_open("savedata.ini");
  2. global.highscore = ini_read_real("score", "highscore", 0);
  3. ini_close();
  4. score = 0;
  5. lives = 5;

可以看出GML语言的一些函数明显是高度封装比较适合制作游戏的...但这种设计到了大型项目中真的靠谱吗???
另外, 在输代码的时候, 在函数名没写完之前, 没有代码提示...惊了

left released(左键松开)事件代码:

  1. room_goto(room_game)

这里的room_game是创建的room资源, 这里已经可以直接当变量名使用了

draw事件

  1. draw_self(); //draws sprite assigned to this object
  2. draw_set_font(font_hud); //set font
  3. draw_set_halign(fa_center); //set horizontal alignment for drawn text
  4. draw_set_colour(c_black); //sets drawing colour as black
  5. draw_text(250,280, "Highscore: "+ string(global.highscore)); //draw Highscore: plus value of global.highscore

画sprite, 画最高分, draw相关函数只能在draw事件中用
这种GUI的设计方式...简直鬼才啊...
不过在GMS2中看到了一个draw gui事件, GMS2的ui实现方法之后再确定

游戏退出按钮的代码也很简单

  1. game_end();

习惯了unity的GUI实现我好想吐槽啊...程序员还是更喜欢直接写代码而不是拖拖拽拽的

obj_target 怪物的创建

create事件

  1. x=irandom_range(100,700); //sets x position at random between 100 & 700
  2. y=irandom_range(100,300); //sets y position at random between 100 & 300
  3. timer=100-score; //set timer as 100 less score - so it gets faster
  4. if timer<=5 timer=5; //check if less than 5, set as 5 if it is
  5. alarm[0]=timer;

直接用xy变量来表示位置的模式...惊了...

alarm 0事件

  1. audio_play_sound(snd_you_are_dead,1,false);//plays a sound
  2. lives-=1; //reduce lives
  3. instance_create(50,50,obj_target); // create a target
  4. instance_destroy(); //destroy self

播放声音,扣玩家一滴血,创建一个新敌人并销毁自己

原文链接:http://www.cnblogs.com/crf-moonlight/p/11372415.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号