Gamemaker studio2经验(1)——右键人物移动逻辑
问题概述
红警、帝国时代、星际争霸……想必很多玩家都对这类即时战略游戏保有极深的感情。其中有一个较为常见的逻辑便是——左键划动选中人物,然后右键标记目标地点,使得人物向目标地点移动。这个逻辑最常见的问题在于——可能会有不同的部队被选中,使得他们在同一时间向不同的地区进发。为了解决这个难点,博主想了一套相对简单的逻辑来实现。
解决方案
基本思路非常简单。首先我们先定义一个叫旗帜的物体,旗帜的本质意义就是玩家点击右键后留下的目标点,其他的按照逻辑编写代码即可。基本流程如下:
- 创建旗帜物体obj_mubiao.(建议给这个物体挂一个sprite,方便debug)
- 编写选中角色的逻辑代码。
- 编写在空白区域点击左键以取消选中的逻辑代码。
- 编写在空白区域点击右键以放置旗帜的逻辑代码。
- 编写旗帜的逻辑代码。
代码实现
按照上述思路,我们开始对各个物体分别编写代码。
obj_zhujue
一、创建
对于主角,先创建一个属于自己的旗帜。
具体方法是创建一个旗帜并把这个旗帜的id赋给一个变量mubiao中,然后再把自己(id)赋成旗帜(mubiao)的“主人”,这样把人物和自己旗子的关系确定下来
mubiao=instance_create(0,0,obj_mubiao); //创造一个以自己为对象的旗子
mubiao.zhuren=id; //将旗子的对象设置为自己
二、鼠标左键放开
里面就一句话,shubiao=1表示选中了主角(当时不习惯使用布尔值,表打我~)
shubiao=1; //表示鼠标选中了这号角色
三、全局左键按下
里面也只有一句话,表示空白区域点一下左键就取消所有选中
if (shubiao==1) shubiao=0; //判定:如果此时处于选中状态,则取消选中
四、全局右键按下
首先判断是否有人物被选中,如果有便进入创作
if (shubiao==1 ) //判定右键时是否是该物体被选中
{move=1; //开启移动模式zhan=0;move_x=mouse_x; //移动目标:鼠标x值move_y=mouse_y; //移动目标:鼠标y值dertax=move_x-x; //横坐标远近dertay=move_y-y; //纵坐标远近if (dertax!=0) k=dertay/dertax; //斜率if (dertax==0) k=dertay/(dertax+0.001); //补救当x=0时导致的运算错误if (k<-1 || k>1 && dertay>0) fangxiang=1;if (k>=-1 && k<=1 && dertax>=0) fangxiang=2;if (k<-1 || k>1 && dertay<0) fangxiang=3;if (k>=-1 && k<=1 && dertax<0) fangxiang=4;
}
五、步事件
这个是人物移动指令,不难理解
/* 向下移动 */
if (move==1 && fangxiang==1 && (image_index>=2)) image_index=0;
if (move==1 && fangxiang==1){if (distance_to_point(move_x,move_y)>0.5)mp_potential_step_object(move_x,move_y,move_speed,obj_no);if (distance_to_point(move_x,move_y)<=0.5) {speed=0;move=0;zhan=1;}}/* 向右移动 */
if (move==1 && fangxiang==2 && (image_index<=10 or image_index>=13)) image_index=11
if (move==1 && fangxiang==2){if (distance_to_point(move_x,move_y)>0.5) mp_potential_step_object(move_x,move_y,move_speed,obj_no);if (distance_to_point(move_x,move_y)<=0.5) {speed=0;move=0;zhan=1;}}/* 向上移动 */
if (move==1 && fangxiang==3 && (image_index<=1 or image_index>=4)) image_index=2
if (move==1 && fangxiang==3){if (distance_to_point(move_x,move_y)>0.5) mp_potential_step_object(move_x,move_y,move_speed,obj_no);if (distance_to_point(move_x,move_y)<=0.5) {speed=0;move=0;zhan=1;}}/* 向左移动 */
if (move==1 && fangxiang==4 && (image_index<=3 or image_index>=6)) image_index=4
if (move==1 && fangxiang==4){if (distance_to_point(move_x,move_y)>0.5) mp_potential_step_object(move_x,move_y,move_speed,obj_no);if (distance_to_point(move_x,move_y)<=0.5) {speed=0;move=0;zhan=1;}}
obj_mubiao
步事件
表示如果对应主角处于被选中状态,那么就显示旗帜,否则会隐藏
一旦主角到达指定位置,旗帜消失
if (zhuren.shubiao=1) image_alpha=100;
if (zhuren.shubiao=0) image_alpha=0;
if collision_point(x,y,zhuren,0,0)
{x=0;y=0;
}
全局右键
这里面是设定终点位置
if (zhuren.shubiao==1)
{x=zhuren.move_x;y=zhuren.move_y;
}
if (collision_circle(x,y,1,obj_difang,1,0) && zhuren.duixiang=collision_circle(x,y,1,obj_difang,1,0))
{zhuren.move=0;zhuren.da=1;
}
else
{zhuren.chetui=1;
}
if collision_point(x,y,1,obj_no,1)
{x=0;y=0;
}
Gamemaker studio2经验(1)——右键人物移动逻辑相关推荐
- Gamemaker studio2经验(2)——TCP联机
问题概述 众所周知gamemaker是一款制作2d游戏的优秀引擎,但是落后的弱联网机制始终是一个坑.所幸在gms2中,yoyogames集团加入了TCP的联机机制,这也为gm系列引擎制作联网游戏带来了 ...
- Gamemaker studio2经验(3)——昼夜更替效果实现
问题概述 在一些知名引擎(如unity,godot,cocos等)中,天空盒概念的引入使得场景中的天空丰富多彩,但是gm就吃了这个大亏.由于动态天空制作麻烦.没有对口的天空盒系统,导致很少有开发者在g ...
- Gamemaker studio2经验(4)——打字机效果
问题概述 在很多游戏中--算了实在不好意思写引言了,就直说啦.如果你是UT粉,想用gm搞搞UT的同人作品但是又无从下手,那么请看过来. 对于RPG类游戏,文字交流系统是不可或缺的,但是gm的文字系统- ...
- 如何debug 右键菜单执行逻辑 - Test BSP Application page implementation
Created by Jerry Wang, last modified on Aug 11, 2014 需要在SE80里debug 在右键菜单里选择了Test之后的执行逻辑. 直接在command ...
- Unity3D游戏制作——人物移动逻辑
Unity中移动某个游戏对象有以下两种方式: ·更改Transform组件的Position属性: ·利用物理引擎(PhyX, Box2D)移动游戏对象. 首先我们试着通过调整Transform组件的 ...
- 多模态人物识别技术及其在爱奇艺视频场景中的应用 | 公开课笔记
[12月公开课预告],入群直接获取报名地址 12月11日晚8点直播主题:人工智能消化道病理辅助诊断平台--从方法到落地 12月12日晚8点直播:利用容器技术打造AI公司技术中台 12月17日晚8点直播 ...
- 004_推箱子-游戏逻辑
1. 游戏逻辑 1.1. 定义初始化地图变量 1.2. 定义活动地图, 因为人物每移动一次, 地图都发生了变化 1.3. 坐标类, 定义人物位置 1.4. 定义当前人物坐标变量 1.5. 绘制场景时, ...
- 软件测试理论与经验--阅读笔记
第1章 测试员的角色 测试人员的角色到底是什么?能够定义的很清楚吗? 经验1-测试员是项目的前灯 测试就是要找到信息,有关项目或者产品的关键信息决策都需要根据这些信息来决定. 经验2-测试员的使命决定 ...
- 软件测试理论与经验-第1章(测试员的角色)-第2章(按测试员的方式思考)-阅读笔记
Lessons Learned in Software Testing 美 Cem kaner.James Bach.Bret Pettichord著 本书的三位作者具有多年的测试经验,知道成功的测 ...
最新文章
- undefined symbol: sqlite3_open_v2
- java 获取计算机内存
- php挖洞提权,记一次渗透挖洞提权实战
- 【githubgit】1、github中的watch、star、fork的作用
- php-dev离线安装,局域网 pm2 离线安装
- 20155210 Exp5 MSF基础应用
- 使用powermock 测试static 方法,jacoco统计覆盖率问题
- Lightbox JS v2.0
- 推荐-最新PSP游戏下载,不用注册直接下载!(1)
- 自制Anki选择题模板(支持桌面版/移动版)
- 《失业的程序员》(十二):潜意识的智商 .
- java web前端邮件,JavaMail:在Web应用上完整接收、解析复杂邮件(转)
- centos查询 硬盘序列号查询_CentOS查看主板型号、CPU、显卡、硬盘等信息
- 我的世界服务器无限耐久护甲,我的世界无限耐久指令 | 手游网游页游攻略大全...
- tcp图片13包java怎么接收_13. TCP协议中的动态数据传输:应对小数据包
- 机器人运动学、动力学基础上利用MATLAB进行PID控制仿真
- 量子计算机是什么?量子计算机和传统计算机之间有什么区别?
- (30)zabbix Trapper 监控项配置
- 中国量子计算机芯片美国,13nm!中国量子芯片再获突破,美国专家:中国学者不睡觉吗?...
- 64格棋盘放芝麻,求重量。
热门文章
- iOS小技能:app侧登录流程【上篇】 (前置知识)
- Myeclipse之回退版本
- git版本回退命令_git 版本回退 撤销 删除
- 这台iPad最适合程序媛吃鸡,号称吃鸡神器!
- 山东大学计算机考研压分,很坑!考研院校:这些骚操作,你不得不防
- cpu是计算机硬件中的,电脑硬件CPU介绍
- 超实用工具:获取法定节假日、休息日、周末天数
- [渝粤教育] 广东-国家-开放大学 21秋期末考试马克思主义基本原理概论(A)10882k1
- php循环实现金字塔,PHP中使用循环实现的金字塔图形
- 小米生态链企业商米科技完成数亿元C+轮融资,蚂蚁金服投资...