有问题,求教!!!
gamemaker吧
全部回复
仅看楼主
level 11
石镐◆SG 楼主
obj_player:
创建 事件
spd=8
range=20
var dis;dis=point_distance(x,y,obj_enemy.x,obj_enemy.y)
if(dis<range){
instance_create(obj_player.x,obj_player.y,obj_bullet)}//距离敌人小于20时发射子弹
步 事件
if(keyboard_check(vk_right)){
x=min(x+spd,room_width-32)
}else if(keyboard_check(vk_left)){
x=max(x-spd,0)
}
if(keyboard_check(vk_down)){
y=min(y+spd,room_height-32)
}else if(keyboard_check(vk_up)){
y=max(y-spd,0)
}//玩家移动按键代码
本来想要的效果:与obj_enemy距离<20时创建obj_bullet
结果:什么事也没发生
obj_bullet代码:
创建 事件:
向obj_enemy.x,obj_enemy.y移动以速度30
本来想要的结果:子弹向敌人移动
结果:子弹站在原地不动。
======
不知道哪里有错误?
@阳光-1024
2018年10月14日 11点10分 1
吧务
level 12
var _id = instance_nearest(x, y, obj_enemy);
if instance_exists(_id)
{
var dis = point_distance(x,y,_id.x,_id.y);
var dir = point_direction(x,y,_id.x,_id.y);
if(dis<range)
{
_id = instance_create(x,y,obj_bullet)}//距离敌人小于20时发射子弹
_id.direction = dir;
}
}
上面代码放到step事件里。
子弹create代码:
speed = 30;
新人还是要好好看文档,别上来就做游戏。
2018年10月14日 13点10分 2
谢谢![吐舌]我去琢磨琢磨
2018年10月20日 01点10分
有问题!var _id = instance_nearest(x, y, obj_enemy);缺少表达式
2018年10月20日 11点10分
@石镐◆SG 什么叫缺少表达式。错误提示什么,直接截图。
2018年10月20日 13点10分
@blovestorm 错误提示,第一行第11列 可能缺少表达式
2018年10月21日 04点10分
level 11
石镐◆SG 楼主
2018年10月20日 12点10分 3
level 11
石镐◆SG 楼主
错误截图@blovestorm
2018年10月21日 10点10分 4
你那if最后少个"}"。我真心劝你还是好好学习下基础知识吧,这种错误都犯的话,必须要从头好好学。
2018年10月21日 10点10分
@blovestorm 今天重新编了一下,没报错,但是敌人莫名其妙的朝玩家的反方向跑,子弹也没刷出,改天发个视频[泪]
2018年10月21日 12点10分
level 11
石镐◆SG 楼主
@blovestorm 刚才翻了下F1,琢磨了一会,发现
2018年10月21日 11点10分 5
level 8
你的格式,恕我孤陋寡闻,既不是声名临时变量,又不是赋值。看不懂,从没见过这样写的。先学好格式吧。看赵品尉《GMS教程合集(第1卷)》
2018年10月21日 11点10分 6
level 8
你这是GM8吧,GM8不是GMS,临时变量声明的同时,不能赋值。
var id;
id=.........
这样的格式,注意要用分号隔开
临时变量不能声明时赋值,但是本地变量则可以,直接用
变量名=表达式
id=.......
2018年10月23日 13点10分 7
星期日的时候试了你这个格式,但是游戏运行出错,改天发个截图
2018年10月25日 04点10分
@石镐◆SG 你把源文件分享出来吧,我有空帮你改改
2018年10月26日 14点10分
@四脚盘带 谢谢!
2018年10月27日 05点10分
level 8
伪代码。
代码写到脚本里面,可供多个对象调用。
脚本随便取名,只要你觉得方便。
然后脚本内部代码。我没打开编辑器,不保证代码的正确性,关键是思路。
添加脚本,输入脚本名
lifeRecover
对于这个脚本,只需要传递2个参数即可。
1是对象,作用于谁。
2血量,作用多少。
血量可正可负,正数表示加血,负数表示收到伤害。
-----------------------------------------------
lifeRecover内部代码
--------------------------------------
var _ob;
var _blood;
_ob=argument0;
_blood=argument1;
//加血,很好理解,血量肯定是不能大于最大血量的
if(_blood>0){
_ob.life=min(_ob.life+_blood,_ob.life_org);
exit;
}
//负数,由于上面用了exit,此处就不用再做判断
_ob.life=max(_ob.life-_blood,0);
//血量小于等于0,表示对象死亡,此处简单删除处理,你可以添加自己的代码,比如敌人死亡动画,掉落物品等
if( _ob.life<=0){
with(_ob){
instance_destroy();
}
}
-------------------------------------------------------
然后你需要重新编写子弹给与伤害的代码了,上次我记得用的是with(temp){life=life-sendhurt}
可以利用这里的脚本方法,直接lifeRecover(temp,-hurt),由于去掉了with,直接调用子弹的伤害值
加上负号就可以给与对象伤害了。
使用方法就这样,加血2,
lifeRecover(instance,2)
伤害2点血
lifeRecover(instance,-2)
2018年10月29日 14点10分 10
有个地方错了,负数减血,用_ob.life=max(_ob.life+_blood,0);因为_blood 为负数,直接+负数即可,呵呵,没转变过来[吐舌]
2018年10月29日 14点10分
level 8
hurt子弹的伤害,这个数值,就是玩家或者敌人的攻击力,在创建事件里面。变量hit
2018年10月29日 14点10分 11
level 8
给你加个血瓶吧。链接: https://pan.baidu[吐].com/s/1K3KtQv6ZHHQ7wa7_naK6pQ 提取码: 3wet
2018年10月29日 14点10分 12
level 11
石镐◆SG 楼主
@四脚盘带 我给血包系统加了点东西:
步事件:a = instance_number(ob_blood)
if a = 0
instance_create(20+(random什么什么的),20+(random什么什么的),ob_blood)//记不清了,是随机位置创建实例的代码,套用了ob_enemy的代码
由于敌人死一次复活一次,我把ob_enemy的销毁事件删除了,改了一下:
步事件:a = instance_number(ob_enemy)
if a = 0
instance_create(20+(random什么什么的),20+(random什么什么的),ob_enemy)//记不清了,是随机位置创建实例的代码
结果出人意料,直接停止运行。。。
2018年11月02日 14点11分 13
level 8
这个逻辑是没有问题,但是是不会执行的,因为最后一个怪物被删了才能满足敌人的数量等于0,要保留1一个怪物在舞台,就必须if a 《=1.。。。。3个怪物在舞台,就 if a<=3 。。。。。。
这样才行。还有你直接停止运行,肯定是你的代码出了问题。
2018年11月03日 15点11分 14
谢谢,如果我单独做一个controller实例来控制敌人刷新,是不是就没问题?
2018年11月04日 06点11分
停止运行是因为一下子创建了太多的实例,内存崩了
2018年11月04日 06点11分
@石镐◆SG 敌人的控制生成,肯定是写到一个单独的控制器里更好,这样便于维护以及更多逻辑的扩展
2018年11月05日 14点11分
@四脚盘带 效果的确不错
2018年11月06日 04点11分
level 11
石镐◆SG 楼主
@四脚盘带 这里想弄一下精灵随移动方向旋转(面向行走方向),可image_angle似乎不起作用,求帮助!
如果可以,帮忙把小人贴图修改一下,谢谢!
链接:https://pan.bai[怒]du.com/s/1rXLLNBJ[开心]S6JYU_vC7Rr4zaA 密码:7ggz
2018年12月09日 09点12分 16
level 8
不想打开gm了,用image_direction[阴险]
2018年12月09日 13点12分 17
随移动方向旋转怎么破?
2018年12月10日 04点12分
1