网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
可签
7
级以上的吧
50
个
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月25日
漏签
0
天
gamemaker吧
关注:
13,688
贴子:
95,897
看贴
图片
吧主推荐
视频
玩乐
22
回复贴,共
1
页
<返回gamemaker吧
>0< 加载中...
人攻击怪物的碰撞判断,应该写在人里还是怪里?
只看楼主
收藏
回复
★未熟的恶魔★
初涉编程
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
人攻击怪物的碰撞判断,应该写在人里还是怪里?
怪物很多,怪的状态也很多,要是攻击的一瞬间每个都验证一次碰撞
那么大概要在零点几秒的时间里验证至少上千个碰撞检测。能保证不
卡么??或者造成攻击失误??
送TA礼物
IP属地:吉林
1楼
2018-03-24 10:32
回复
TMSSTR-
模块编程
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
应该都可以吧
我渣渣,不敢确定
IP属地:广东
来自
Android客户端
2楼
2018-03-24 10:52
回复
收起回复
2026-01-25 22:32:52
广告
不感兴趣
开通SVIP免广告
sunyubokkkkk
企业掌舵
15
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
写哪都一样,写人里需要检测上千碰撞,写怪里同样要检测上千碰撞。
如果怕卡,一个原则就是,当事先筛选带来的效益大于筛选产生的消耗,一定要先事先筛选再检测碰撞。
IP属地:上海
来自
Android客户端
3楼
2018-03-24 10:56
回复
收起回复
积极而小米
软件架构
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
写人那里和写怪那里都一样,碰撞判断交给游戏引擎就行了,相信引擎自己会有优化的。
IP属地:浙江
4楼
2018-03-24 11:13
回复
收起回复
★未熟的恶魔★
初涉编程
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
谢谢大家。给的建议很不错!
IP属地:吉林
5楼
2018-03-24 20:05
回复
收起回复
iloveping5210
算法提高
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
肯定写在人上面,给怪物一个父类object,然后不同状态不同判定,可以直接if多种状态
来自
手机贴吧
6楼
2018-03-26 09:18
回复
收起回复
iloveping5210
算法提高
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
肯定写在人上面,给怪物一个父类object,然后不同状态不同判定,可以直接if多种状态
来自
手机贴吧
7楼
2018-03-26 09:18
回复
收起回复
贴吧用户_0XUWNKQ
技术总监
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我做洛克人同人的时候把造成伤害判定写在子弹里,把受伤判定写人里。因为子弹和人比怪少。关于怪多的问题,你应该尝试实例解散,很多地图大的游戏都是通过解散屏幕外面的实例减少计算,从而保证不卡。
IP属地:北京
来自
iPhone客户端
9楼
2018-03-26 21:53
回复(3)
收起回复
2026-01-25 22:26:52
广告
不感兴趣
开通SVIP免广告
★未熟的恶魔★
初涉编程
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你好,现在有很关键的问题,子弹击中玩家和
玩家操作失误撞到子弹上,其实是相同的代码吧?
你写在子弹里一次,然后再写在人物里一次,是不是就重复了?
重复的判定会不会引发2次伤害?第一次子弹打中人被删除了,
然后第二次,我们再删除一个已经删除了的子弹,会不会卡死?
都是大神,感谢你们回复我的帖子,很开心,趁你们都在,赶
紧把不会的疑问都解决掉。
IP属地:吉林
10楼
2018-03-27 07:00
回复
收起回复
四脚盘带
模块编程
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
回复10楼:
应该会出现两种情况:
1,如果人物中先检测,然后删除了子弹,子弹就不存在了,不会造成二次检测和伤害。
2,如果子弹先检测,子弹删除后,人物代码中如果再对这颗子弹做遍历的话,会报错。
为什么要写到两处,代码统一写吧。
看了你的这些问题,最根本的问题就是,代码的执行顺序没搞明白。还有就是做游戏前
对整个游戏流程没做规划,想到一点,就敲一点代码,效率很低。
给你说说我一般做游戏的流程:
1,编写核心算法,如果没有,直接pass。
2,核心算法写成后,表示你的想法可实现。这时候就要构思整个游戏的流程。
也就是代码块之间的相互关系。哪些代码块先运行,哪些后运行,哪些被调用等等。
最终确定代码的位置。一般尽量降低开销。
3,每个代码块的编写。
这个很自由,每个人都有自己的风格,我更偏向利用脚本。比如对玩家的移动
编写一个脚本,玩家的技能,编写一个脚本,事件的触发编写脚本等等,一切
代码基本全写到脚本里,在对象内部,直接调用等等。
4,最后一步,就是对代码的优化。
最后回答你最初的问题,代码写到哪里,其实都可以。看你怎么安排你的代码,也就是第2步。
你可以在怪物内部判断,也可以在人物中遍历。开销差不多,关键看你的整个游戏代码块之间的逻辑关系。
我的做法是,把碰撞判断放到技能脚本代码块儿中去,然后伤害输出放到统一的代码块。比如伪代码:
----------------------
伤害heartEnemy脚本:
revOBJ=argument0;
revValue=argument1;
revOBJ.hp-=revValue;
if(revOBJ.hp<0){
//删除怪物等等处理
}
-------------------------
技能0,基本攻击skill_0脚本:
var revOBJ;//伤害对象,如果是群攻就用list等等
var sendOBJ;//伤害输出者
var sendValue;//传递的伤害
var i;
sendOBJ=argument0;
for(i=0;i<ss;ss+=1){
//武器的碰撞判断,遍历出被攻击的怪物
}
//调用伤害脚本
heartEnemy(sendOBJ.attack,revOBJ)
-------------------------
玩家按键触发脚本keyEvent
if(keyPressA){
then move LEFT
}
else if(keyPressD){
then move RIGHT
}
else if(keyPressW){
then move UP
}
else if(keyPressS){
then move DOWN
}//技能触发
else if(keyPressJ){
skill_0();
}
---------------------
然后玩家步事件中,把keyEvent()调用出来即可。
后面的技能,按照这种模式,直接添加skill_1....skill_n脚本就编写完了
所有技能。
所以这种方式效率就快多了,而且错误的话,也容易查找。
12楼
2018-03-27 09:48
回复(5)
收起回复
下辈子去当狗
系统分析
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
自认为板栗仔说的灰常有道理,我也是这么想的
IP属地:陕西
来自
手机贴吧
13楼
2018-03-27 21:17
回复
收起回复
blovestorm
小吧主
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
逻辑相同,写在实例少的对象里较好。
如果人物对所有怪攻击的逻辑都是相同的,我认为写在人对象里就可以。
但如果某些被攻击的怪物有特殊处理(攻击反弹、流血、播放不同音效等),这种情况我认为写在怪里逻辑更清晰一些。
IP属地:北京
14楼
2018-03-29 21:09
回复
收起回复
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧热议榜
1
已婚老哥含泪劝退:千万别结婚!
2324790
2
女留子急了:三通一达纯造谣
1936736
3
美使馆回应:止痛药管够,病难瞧!
1662164
4
无绿帽不武侠?裤裆文学何时休
1388259
5
60元水果惹祸,丈夫强制妻子劳改
1263470
6
作者讨伐起点,流量都去哪了?
1206325
7
天价新定义!西大月付学费五万
964344
8
美国大乱,ICE再次枪杀白人
904981
9
彩礼成灵药,38w治愈童年
858748
10
日本极端催生:不生娃就切子宫
697137
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示