新人提问集中帖[2024]
gamemaker吧
全部回复
仅看楼主
吧务
level 13
q糖豆p 楼主
提问须知:
---基础---
0:确认你的问题在置顶帖、贴吧第一页、本集中帖的最后一页都无法找到答案;
1:确认你的问题不在引擎自带的新人教程范围;
2:请勿使用含贬义的词汇来形容你的问题,除非你确实想说“无法回答这个问题的都(贬义词)”;
3:通常来说,你的问题要包含这4个部分,即“你想做什么”(目的)、“你做了什么”(过程/已有内容或方式选择,注意这部分将决定问题的解决方向,什么都不说的话意味着完全答非所问的可能)、“现在的效果”(运行结果)、“决定性的差异”(要改进/改变的地方),除非你有充足的理由省略其中一项或多项;
4:如果附带代码截图,请把object名、事件名、代码行号一起截上,并保证截图里的“空白”尽可能少;
5:提问请注明当前使用的软件版本,如果是参照旧版(2.2或更早)教程,请查看建立script时自带注释的提示阅读文档,并按新的function结构(或者说把旧版教程的script格式转化为新版function格式)进行书写;
6:目前这个时间点,free档的可以导出大多数平台,如果不商用的话足够使用,没有找破解的必要,如果商用的话你会在乎软件本体的费用嘛?
---进阶---
7:不要拿别人的代码出来提问;
8:请充分理解,绝大多数问题的解决方案都不唯一,不同人回答的可能是不同路线,且可能在方向上正好相反(如两件事冲突选择放弃/弱化哪一个)。一题多问会大幅度增加这种情况的发生概率;
9:请尽量避免提问类似“有没有人知道……”之类的问题,除非你想要的确实是“有”或“没有”这样的结果(做游戏/程序,严谨是必要的);
10:请尽量使用正式一些(括号齐全,按程序逻辑设置缩进)的代码格式,也许格式改好以后自己就能找到错误在哪;
11:加一个变量能解决的问题都不是问题,加两个变量/一个数据结构能解决的问题也都不是问题;
12:能自己做个demo测试一次就知道答案的问题都不是问题,无论怎样都设计不出demo来做出区分的选择对你来说选哪个都一样,不必纠结。
---传承---
13:如果问题的复杂度较高,且有计划逐步攻克问题并记录完整解决方案的话,建议单独开帖,本吧精华帖类别“经典问答”正是为此准备;
14:问题完美解决以后,希望能留下解决问题的记录(用了什么方法,或参照哪个回答的方案),这里有不少“哟,我这坏了不能用”这样不明所以的提问又在几天之后追加个“哟,现在能用了,此帖终结”这种不明所以的解决方法,对后续搜到帖子的读者没有任何帮助;
---碎碎念---
这吧好冷啊,好冷啊……
2023年12月25日 03点12分 1
level 12
GM8里面用Mazemusic播放音乐之后停不下来,用了停止代码还是在播放,怎么办啊
2024年01月01日 21点01分 2
用mm_stop也停不下来,为什么啊。
2024年01月01日 21点01分
搞定了,不过还是不明白为什么销毁事件不能停止播放。
2024年01月01日 22点01分
0、用插件实现功能的方式可能与原引擎存在差异;1、相关函数使用的方法需要参照插件作者的文档;2、销毁实例不会终止的东西,是实例对于实例以外东西的更改结果(火柴点燃蜡烛后,即使火柴没了,烛火也不会熄灭);3、这楼层欠缺的内容太多,以后有人遇到相似问题时可能无法从这里获得帮助。
2024年01月04日 03点01分
level 6
请问那种被子弹打中就闪一下的效果,在父物体上用什么样的方法做最简单。
2024年01月04日 06点01分 3
使用parent object已经是简化的方法了。至于闪一下,不太清楚你想实现的具体效果,如果是让自身“变白“,对于DND制作来说可能不太现实,不太清楚是不是可以使用blendmode达到一定的加亮效果。比起更改绘制事件,也许创建一个闪光实例(传递sprite、image参数),让他们绘制自己以后消失也许更方便。
2024年01月04日 09点01分
@q糖豆p 请问曝光的GML语言是什么样的?
2024年01月04日 17点01分
@q糖豆p 我变红弄出来了,但是最理想的还是变白,也就是增加亮度。几个内置变量好像没有亮度增加的。
2024年01月04日 17点01分
@魔導紳士 吧主说的那个方法dnd就可以实现;创建闪光实例的意思,例如有一张苹果的图像,你用绘图工具复制她,然后把她的颜色全部染成白,然后把这两张图都放到游戏工程里,正常情况下,绘制正常的苹果图,在需要她变白的时候,绘制白色的那张覆盖她,,在不需要的时候,取消绘制白色的那张[笑眼][笑眼][笑眼][笑眼][笑眼][笑眼][笑眼]
2024年01月06日 06点01分
level 6
请问红圈位置这个这个不对齐的线,和那种对齐的线有什么区别。会不会有隐患。
2024年01月13日 16点01分 5
不太清楚DND的UI设计,这方面code有显著优势,用花括号可以明确一些逻辑/控制的作用范围。所以打算啥时候开始用GML。或者试试临时方案,复制一下这个object,把复制品转成code模式看看代码结构
2024年01月18日 00点01分
@q糖豆p 没啊,DND好像还挺能打的样子,新游戏做到第四关还没遇到什么难点。话说前段时间DND不是改名视觉型GML了吗?所以我现在也是荣誉GML使用者了,哇哈哈!
2024年01月18日 08点01分
@魔導紳士 那就换个说法,打算啥时候开始GML code。
2024年01月19日 01点01分
level 10
版本GMS2,代码在子弹obj里,obj_center为目标位置
目的是做出一个有偏转过程的跟踪效果
问题在于在某些特殊位置(如生成位置在目标附近)会出现子弹围绕目标做圆周运动因此打不到目标的情况,尝试过将其中的偏转方向换为(dif/10),但仍会出现类似情况
想请教解决方法
var dif;
dif = direction-point_direction(x,y,obj_center.x,obj_center.y);
while(dif<0){dif+=360;}
while(dif>360){dif-=360;}
if(dif>4&&dif<356)
{
speed += 0.1;
if(dif<180){direction-=4;}
if(dif>=180){direction+=4;}
}
else
{
direction = point_direction(x,y,obj_center.x,obj_center.y);
speed += 0.4;
}
2024年01月14日 02点01分 6
是的,这种设计,这种框架决定了这个bug必然存在。现实里的汽车想要开到侧面的某个位置,向那个方向打满方向一直开也是开不到的。要消除“无法到达区域”,当前框架需要做出调整。
2024年01月18日 00点01分
如果速度不变,“无法到达区域”位于行进方向的两侧,区域为圆形,大小正比于速度,反比于灵活度(每步转弯角度)。但看你的代码似乎还做了速度增加,会导致“死区”的判定变困难。咱之前好像做过类似模型,有大概2个方案:一种是先直线行进,在确定目标离开死区后再进行转向,这个一开始不能加速。
2024年01月18日 01点01分
另一个方案就是不使用“转向”而是改用类似“加速度”的方式。让子弹以抛物线轨迹行进,最终命中目标位置。当时好像找到了根据固定的初始速度、初始方向、目标相对位置、加速度的确定大小来计算加速度方向的计算公式。“可惜忘了”。
2024年01月18日 01点01分
@q糖豆p 好的,明白了,现在是未命中时不断减速以达到效果,虽然有些治标不治本,但是观感也可以。
2024年01月20日 14点01分
level 4
GMS2里面,怎么实现图片中黄色区域的物体总是在视野的固定位置,视野设置的跟随人,view_xview在GMS2里面似乎行不通,
2024年01月21日 15点01分 7
场景移动而UI不动如今有很多解决方案:0、仍然使用view,要注意从8.0到S2有些结构发生了变化(增加了camera);1、UI放到draw-GUI事件,这样可以有效解决这个问题但可能需要注意UI和room可能缩放关系/原点位置不同;2、改用surface,个人比较推荐这种,稍微用一下surface就能比view优化很多绘制运算。
2024年01月22日 10点01分
level 13
问一下买断制的gms2软件更新到哪个版本时导出后就不能用于商业用途了?
2024年01月22日 05点01分 8
有个说法是一个叫runtime的版本,咱没去翻原文看。不过从个人角度来说,咱更希望你可以有“买就买了,反正作品一上架就能赚回来”的信心。
2024年01月22日 10点01分
@Venus🔥 咱没读过新的EULA,具体细节应该会在里边写的很清楚。不过咱的大方向和之前说的一样,不商用的话用新的也可以用,商用的话应该有买得起新买断的信心。
2024年01月24日 06点01分
@q糖豆p 那就发布之前订阅吧,反正用不了多少钱
2024年01月23日 08点01分
@Venus🔥 23年11月从订阅改为买断了。
2024年01月24日 04点01分
level 13
问一个关于一个代码的问题。当时翻文档时发现一串代码的介绍是一帧之内运行循环多次这一帧的内容,然后效果是减少游戏卡顿,后来再找这串代码找不到了,不知道当时怎么翻出来的,有人知道吗?知道的话帮忙告诉一下,谢谢。
2024年01月23日 08点01分 9
试试查找功能。
2024年01月24日 00点01分
debug运行模式下,有个界面。到了debug界面应该比较容易找到。
2024年01月24日 04点01分
level 6
请教一个问题。
玩家子弹如果是碰到地方就自毁那种,可以精确造成某个值的伤害。
但如果是那种不自毁的,比如一个光束穿透过去,或者是一个持续一小段时间的范围爆炸,则很难算出实际伤害为多少,而且根据敌方物体碰撞框大小也会不同,请问有什么简单的方法能够处理,让这种攻击手段变为一个谁碰一下都是同一伤害值。
我能想到的方法就只是设变量,为1时伤害有效,碰撞时设为0,然后给他一个某武器CD之内的回复时间。
2024年02月18日 11点02分 10
没太理解你的需求,是想让一个“不会立刻摧毁,可作用域多目标”的伤害物对每个目标造成“一次性的,固定值的”伤害吗?这样应该是在伤害物上设置一个数组(或其他什么数据结构)记录每个已造成伤害的目标ID这个方案最合理。CD记录方法可能对同一目标造成多次伤害,也可能在短时接触多目标时判定失效
2024年02月20日 00点02分
@q糖豆p ID始终没开荒过。。。那能否说说碰撞伤害的计算方法。假设碰撞事件是-4 HP,那么一直持续的话是否一秒受到的伤害是-4X60? 如果爆炸的话爆炸动画速度1秒10幅图,共6幅图,每幅图就是6帧,那么这个爆炸的伤害就是6X6X-4 ?
2024年02月20日 13点02分
@魔導紳士 通常的制作方法,结算次数和每秒放多少张图无关。步循环里的事件每轮只触发一次(除了开启view功能后的绘制事件)。碰撞事件也在步循环里,相同的一对碰撞体,每轮步循环会且只会结算一次。
2024年02月20日 19点02分
@q糖豆p 但爆炸不是一般会设定动画结束则自毁么?那么多少图其实确定了持续时间。
2024年02月21日 02点02分
level 1
请问有没有GMprinting或FMODSimple插件?
2024年02月24日 16点02分 11
本人是“不使用插件”一派的,嗯,在这里可能没法找到满意答案。
2024年02月25日 08点02分
level 12
求问gm8要怎么插入视频?试了splash_show_video,但是一直都是unexpected error。
请问是否有其他gm8本身支持的播放视频(最好再游戏窗口内)的方法?如果没有,还有没有其他的方法能播放视频?
2024年03月09日 15点03分 12
GM8和GMS2都需要调用系统已有解码器进行播放,毕竟这是游戏引擎(而不是播放器)。原生GM8已知的播放方式仅限splash,也许借助插件/DLL能实现窗口内,不过感觉这么做属于费力不讨好。至于其他…我不太想建议“以二进制方式读取文件,自己写解码算法”这种瓶颈会出现在性能的方法。
2024年03月11日 00点03分
@q糖豆p 也就是说“没有好的办法”吗。请问吧主是否知道为何splash会出现错误?如果splash的确不行,可能在哪里找到这种插件?如果找不到,怎样能自己制作一个供gm8使用的插件?在哪里可以看到这类教程?我记得在傲娇玉米站有一个相关教程,吧主是否知道其他的?
2024年03月11日 01点03分
@贴吧用户_5EMDC6b 不太清楚,咱之前没有使用过splash,单纯一个“预期外的错误”说原因的话和瞎猜差不多。另外这种“依赖外部环境”的功能很可能因为目标机器环境不同而运行失败,是咱不推荐的方向。而插件是用的越多以后移植就越困难,是咱更不推荐的方向。
2024年03月11日 02点03分
歪路的话,咱刚刚想到一个,还是要根据你的游戏/视频实际情况考虑。把视频转成帧序列图和音轨,帧序列打包成一个sprite(可以是GM8自己的打包),然后载入进行逐帧显示。当然这会极大增大文件大小。可以考虑降低分辨率后放大绘制之类的方法。
2024年03月11日 02点03分
level 9
我想用Gamemaker v2024.2.0.163构建一个安卓应用程序包,于是,我根据Bilibili上BV1V5411M7BP这个视频搭建了安卓环境。可是,我的打包结果却是BUILD FAILED,根据日志共有两处错误,详细日志如下:
请问,如何解决这里的BUILD FAILED?
希望大家能够为我答疑解惑,谢谢!
2024年03月17日 11点03分 13
level 13
新手教程的立绘绘画还有音乐啥的有版权吗?可以商用吗?
2024年03月18日 04点03分 14
不能,要商用得自己原创
2024年06月17日 01点06分
level 9
豆姐好,最近突发奇想给游戏加个无尽模式,但之前游戏内存爆炸导致我的许多资源都使用了外载,具体操作类似于:000000000有个怪物,创建事件检测怪物资源是否载入,如果没载入那么载入怪物资源为全局变量,最后为怪物设置精灵为该全局变量0000000000,,
考虑许多原因和操作难易度,发现内置的f5f6保存非常契合我的需求,但是这个保存不支持保存加载的外部文件,这就需要我在读取游戏时再次重复000中的操作,我先是尝试了直接运行,发现按下f6读取后创造事件未能执行,后复制 创造事件 内容为 游戏开始事件、房间开始事件、键盘f6事件都不行,于是开始思考怎么样才能在f6(即读取游戏事件)之后触发一个东西或者手动再触发创造事件来执行本来的创造事件,不知道自定义事件(user define)或者触发器(trigger)行不行,但是这两个部分暂时没有开荒所以也不确定可行性,想请问一下还有其他的思路吗
2024年03月18日 12点03分 15
又研究了一下,保存时会保存这个全局变量,之后又诱发了一堆bug,搞了半天内存反而更难管理了,干脆还是用数组保存好了orz
2024年03月18日 13点03分
@Acilen- 如果是动态加载的资源然后又使用了存档的话确实很容易出这个问题,毕竟加载顺序不一致的话,得到的资源id应该也是不一样的。但据说数据结构是不会被保存的,也就是说list map那些都不会被保存和加载影响。不过他这个存读档配合资源外部加载我还没尝试起来用过。
2024年03月18日 15点03分
@Acilen- 如果说game_load之后能马上执行一段代码的话,可以尝试一下把他加载资源的代码挪到user事件里去,然后在game_load之后with 对应obj 执行userevent,让他在那进行赋值加载。然后创建事件也调用这个userevent。可能可以解决问题
2024年03月18日 15点03分
不过我也只是纸上谈兵,还是等其他人说一下吧
2024年03月18日 16点03分
level 4
请问使用video draw 只能显示画面的一部分,并且音画不同步怎么回事啊
2024年03月19日 12点03分 16
video draw只有一部分要看视频源的尺寸和你room、窗口、显示放大倍率等参数是否匹配。同步大多数情况是外部设备/线路问题,单纯一句话定位不了具体原因。
2024年03月22日 01点03分
1 2 3 尾页