人物A*移动,创建网格的时候,怎么跟着场景一起创建?
gamemaker吧
全部回复
仅看楼主
level 5
歪客喵👹 楼主
创建
astar = mp_grid_create(0, 0, 16, 16, 32, 32);//创建网格
mp_grid_add_instances(astar, object1,1); //设置障碍
path001 = path_add();//添加空路径
步
if(mouse_check_button_released(mb_left))
{
mp_grid_path(astar, path001, x, y, mouse_x, mouse_y,1); //A*路径计算
path_start(path001,10,0,0);//按路径移动
}
这么写角色是可以点击移动了,但是这个创建不应该在角色身上呀。
因为我要是换个场景,那换场景该怎么办?
我试着把创建的代码卸载场景创建里或者另一个空OBJ里,然后就出错了。
问下这个怎么解决。
2017年11月04日 03点11分 1
level 9
写在场景里,astar写成全局变量? 我随便说的我没用过这功能。[滑稽]
2017年11月04日 03点11分 2
level 5
歪客喵👹 楼主
还有我这么写了以后,添加了移动的4方向移动动画,然后问题来了,到了目标位置怎么换成待机动画?就是说怎么判断人物已经到达位置了。
2017年11月04日 04点11分 3
level 15
写在场景里的话如2楼所说用全局变量,判断路径结束可以用Path End事件
2017年11月04日 16点11分 4
试了下, case 0: sprite_index = spr_jiangjun_walk_right; if(path_end()== true) { sprite_index = spr_jiangjun_daiji_right; } 然后角色就原地踏步走了。第二个SPRITE_INDEX没有执行
2017年11月05日 11点11分
if(path_position >= 1) 这个也不管用……
2017年11月05日 11点11分
level 8
给你讲讲我的想法:场景不同,你的网格就很有可能不一样,而且场景中的阻挡对象,阻挡位置也不可能一成不变。那么就需要创建不同的网格:
1,创建空的对象ob
2,给ob编写创建代码:createOB
xx=arg0
yy=arg2
starID=arg2
with(instance_create(xx,yy,ob)){
execute_string("Astar_"+string(starID))
//或者用指针操作
swith(场景id){
case 0:
callBack=Astar_0
break;
case 1:
callBack=Astar_1
break;
.................
}
script_execute(callBack)
}
3,编写Astar_脚本
Astar_0,Astar_1........
Astar_0脚本:
像你的代码一样,创建一个A星网格,根据场景需要编写不同的网格,然后根据场景添加不同的禁止对象进去,
4,编写search函数,也就是你的鼠标事件函数
search 脚本:
mp_grid_path(astar, path001, x, y, mouse_x, mouse_y,1); //A*路径计算
path_start(path001,10,0,0);//按路径移动
5,添加事件脚本:addevent脚本给所有空对象添加事件
object_event_add(ob,ev_mouse,ev_left_release,"search()");
然后创建一个角色,就在控制体内调用创建函数就行了
createOB(xx,yy,starID)
addevent()
这个系统A*有点坑,建议你自己编写一个,用的时候调用脚本就行了,而且还可以调用自己的一套完整方法
2017年11月05日 01点11分 5
受教了,我初学,大致看明白了,还需要消化下。希望也能帮助到其他人。
2017年11月05日 11点11分
@歪客喵👹 我也才接触不久,只是以前经常做游戏
2017年11月05日 11点11分
@四脚盘带 那个阻挡位置貌似不用担心 mp_grid_add_instances(astar, object1,1); 定义了这个OBJECT1是不可通行,那其他的OBJ都是他的子OBJ就可以了。
2017年11月05日 12点11分
@歪客喵👹 是,我的意思是不同的对象。
2017年11月06日 11点11分
level 5
歪客喵👹 楼主
果然,失败了。这个a星用不了,会穿墙。。然后就回不来了。谁还有好点的鼠标移动的方法
2017年11月06日 10点11分 6
你要做什么呢,可以吧源文件发出来,我有时间帮你看看
2017年11月06日 11点11分
回复 四脚盘带 :就想先从鼠标点击移动开始做。做成那种4方向可以自动跨越障碍的。
2017年11月07日 13点11分
@歪客喵👹 发帖被吞了,你看看这个博客吧,看看他的递归逻辑,A星用在战旗不算最合适的,看明白大概再做一些模块吧。http://blog.c啊sdn.net/啊swordfishx82/a啊rticle/details/47605817
2017年11月08日 00点11分
@四脚盘带 这个不错,不过我得慢慢看,[吐舌],太感谢了
2017年11月08日 03点11分
1