gamemaker吧 关注:13,650贴子:95,134

新人提问集中帖[2023]

只看楼主收藏回复

提问须知:
---基础---
0:确认你的问题在置顶帖、贴吧第一页、本集中帖的最后一页都无法找到答案;
1:确认你的问题不在引擎自带的新人教程范围;
2:请勿使用含贬义的词汇来形容你的问题,除非你确实想说“无法回答这个问题的都(贬义词)”;
3:通常来说,你的问题要包含这4个部分,即“你想做什么”(目的)、“你做了什么”(过程/已有内容或方式选择,注意这部分将决定问题的解决方向,什么都不说的话意味着完全答非所问的可能)、“现在的效果”(运行结果)、“决定性的差异”(要改进/改变的地方),除非你有充足的理由省略其中一项或多项;
4:如果附带代码截图,请把object名、事件名、代码行号一起截上,并保证截图里的“空白”尽可能少;
5:提问请注明当前使用的软件版本,如果是参照旧版(2.2或更早)教程,请查看建立script时自带注释的提示阅读文档,并按新的function结构(或者说把旧版教程的script格式转化为新版function格式)进行书写。
---进阶---
6:不要拿别人的代码出来提问;
7:请充分理解,绝大多数问题的解决方案都不唯一,不同人回答的可能是不同路线,且可能在方向上正好相反(如两件事冲突选择放弃/弱化哪一个)。一题多问会大幅度增加这种情况的发生概率;
8:请尽量避免提问类似“有没有人知道……”之类的问题,除非你想要的确实是“有”或“没有”这样的结果(做游戏/程序,严谨是必要的);
9:请尽量使用正式一些(括号齐全,按程序逻辑设置缩进)的代码格式,也许格式改好以后自己就能找到错误在哪;
10:加一个变量能解决的问题都不是问题,加两个变量/一个数据结构能解决的问题也都不是问题;
11:能自己做个demo测试一次就知道答案的问题都不是问题,无论怎样都设计不出demo来做出区分的选择对你来说选哪个都一样,不必纠结。
---传承---
12:如果问题的复杂度较高,且有计划逐步攻克问题并记录完整解决方案的话,建议单独开帖,本吧精华帖类别“经典问答”正是为此准备;
13:问题完美解决以后,希望能留下解决问题的记录(用了什么方法,或参照哪个回答的方案),这里有不少“哟,我这坏了不能用”这样不明所以的提问又在几天之后追加个“哟,现在能用了”这种不明所以的解决方法,对后续搜到帖子的读者没有任何帮助;
---碎碎念---
吧主位空缺的时候,度娘连过滤广告都困难;当选以后,度娘连正常问答都吞帖。


IP属地:北京1楼2022-12-29 09:38回复
    五天了居然还没有人发言 我来问一手
    我在做一个类似于魔塔一样的demo 现在在用的撞墙的代码是返回上一帧控制的 但是由于移动时并不是一次走一个像素的速度 所以导致撞墙的时候角色的坐标和墙之间会有几个像素的间隔 导致在只能允许通过角色大小的通道进不去的问题
    目前我自己的解决办法是撞墙以后就吸附网格固定坐标 因为后续我希望加入一些不规则的设计 网格吸附还是不太理想
    我想问一下有没有什么其他的方式可以让角色移动到再走一像素就撞墙的时候才停止


    IP属地:甘肃来自iPhone客户端2楼2023-01-04 22:00
    回复
      @RTX院长 在2楼的提问解答:
      首先澄清一点,魔塔的通用设计是基于“格子”而非“像素”的。关于“能否移动”、“移动到哪”、“是否与怪物战斗”、“是否拾取物品”的判定也是基于格子进行。这种规则下咱其实更推荐使用数据结构(比如数组/buffer)存储地图信息,而不是在房间里直接摆放,同时解决了各层之间切换时容易出现的“已打过的怪刷新”、“已拾取的物品再出现”、“已消耗过钥匙的门又有了”这样的BUG。“加入一些不规则的设计”感觉有些意味不明,在没有其他信息支撑的情况下,是个就算拿来当噱头也是犯傻程度远高于设计感的东西。
      如果要加入移动动画(其实不推荐,影响游戏节奏),在整格规则下可以使用的方案之一是这样:玩家的移动仍然是“整格”,但加入一个变量是“剩余移动时间”,这个变量的值平时是0,一旦发生移动的话就会变成10,并在每个step自行减少,玩家sprite的绘制位置是由“之前所在的格子”、“当前所在格子”、“剩余移动时间”共同决定,根据需要可以设置成“剩余移动时间非0的时候不能继续移动”
      如果题主坚持不用整格而继续使用像素坐标的话,事情要复杂一点(好在还不至于无解)。首先要明确的是到底是想让角色“走到整格位置停下”还是如问题原文所说的“到再走一像素就撞墙的时候才停止”。前者可以使用时间控制(格子32像素、移动速度4像素的话要移动8次,不推荐无法整除的设计)或坐标判断(比如墙面坐标是100、140、180这样的数字,玩家也要在对40取余数为20时停下)。后者的话,是要在发生碰撞后(或预移动进行碰撞检测后)进行坐标补偿。当然了,这里要补偿到的位置不是网格吸附,而是基于“碰撞目标的坐标”和“移动方向”计算出的值。移动方向题主应该容易记录,碰撞目标的坐标不要使用obj_wall.x表示,而要在碰撞事件里使用other.x,这里涉及到的是object和instance的区别,碰撞事件的other是用来表示“正在和自身发生碰撞的特殊实例”的。
      这里的设计相对要繁琐,一方面要注意step循环的顺序,一方面要注意“移动时同时碰到了两个坐标不同的实例”会导致的BUG。咱推荐的方式是这样:在标准step里进行常规移动,在碰撞事件里完成“推开1像素”的最终坐标确认,注意这里要使用min/max函数保证最终坐标是“可能推到的最远位置”以防止碰撞事件顺序错乱致使“更靠里的墙由于事件触发靠后,反倒把角色‘拉进去’”的BUG。最后在end step里将玩家放到最终坐标。


      IP属地:北京3楼2023-01-05 09:32
      回复
        @q糖豆p 感谢大佬的耐心解答 撞墙的问题解决了 逐帧坐标补偿完美解决
        首先纠正一下我的说法 我并不是想做一个魔塔一样的游戏 只是在用魔塔作为敲门砖去学习引擎 就像移动模式并非固定要用像素移动或者是网格移动 但是会尝试实现多种移动方式 学会各种效果的实现方法
        然后之前因为我是在用每个房间直接放置实例来布置的 所以遇到存档的时候没办法存档每一个单独实例的参数 大佬说一般都是用数组的 所以我用数组尝试了一下 确实很合理 我用的是一个二维数组来控制每个楼层的道具怪物刷新 array[房间序号][道具序号]=布尔值 问题是解决了 只是不知道这样的方式合不合适 有没有更简单的方式实现
        另外解决了刷新的问题以后 遇到了一个新的问题 数组存档的时候是只能像存变量一样 用循环分别储存数组每一个值 还是说可以直接储存一整个数组的值


        IP属地:甘肃来自iPhone客户端4楼2023-01-09 17:45
        回复
          刚开始学,请问选中文本中间发现只能替换,不能增加文本。只有在末尾才能增加,请问怎么在中间增加文本?谢谢


          IP属地:江西来自Android客户端5楼2023-01-11 22:23
          收起回复
            gm8纯萌新。最近我搞解包了某个gm8引擎制作的游戏,我想在里面添加新的room来增添新的游戏场景,但是是创建的新房间在游戏当中无法跳转,游戏中的房间切换每次都会略过我新创建的房间,请问这是因为我的房间没有存入游戏数据里面的问题吗?还是其它的问题?该怎么解决?


            IP属地:北京6楼2023-01-12 07:25
            收起回复
              请问一下,有一个ttf字体文件,怎么导入进去?


              IP属地:江西来自Android客户端7楼2023-01-12 20:29
              收起回复
                哪里下载GM8


                IP属地:山东8楼2023-01-14 14:45
                收起回复
                  老问题,runtimes下不动,是不是要代理


                  IP属地:江西来自Android客户端9楼2023-01-16 23:10
                  收起回复
                    @贴吧用户_7bb9DC3772 在10层的问题解答
                    硬说的话,方案也有……实在不想在GMS2里开DND,拿GM8截个图好了。

                    判定的“变量”可以不是“变量”而是“包含变量的表达式”。当然方案不唯一,也可以判定(i-1)*(i-2)*(i-5)*(i-8)是不是等于0,甚至(abs(i-3)-2)*(abs(i-5)-3)是不是等于0……但如果只想一次判断i是否等于某个值就达到一次把1、2、5、8都判定到,在咱已知的范围里是不行的。


                    IP属地:北京12楼2023-01-17 23:48
                    回复
                      请问哪里能找到这个扩展包


                      IP属地:北京14楼2023-01-24 13:26
                      回复
                        写到步事件里的移动代码,最近发现了一个问题,如果把游戏的运行速度从60fps改成1fps,也就是一秒一帧的测试时,偶尔会出现明明手已经完全抬起来了(指啥键都没按)但是人物还会出现往前走的现象,可以持续好几帧才停下来,出现这种现象的概率很低,自己也不知道代码哪里出问题了,请求帮忙分析一下看看。


                        IP属地:山东来自Android客户端15楼2023-01-24 20:06
                        收起回复
                          @捉摸不透的屑☞ 在2021(居然都不是2022而是2021,雷点0)帖子203层关于“改变精灵没反应”的提问:
                          0、从照片(而不是截图,雷点1)上可以看到,此object自定义了draw(绘制)事件
                          1、此object的draw事件动作没有截图/照片(即存在“自定义事件里强行绘制sprite6而无视当前sprite选择是什么”这种可能)
                          2、运行的照片(也许都不是)没有补充说明,可以说是处于“意义不明”状态
                          也许你认为“这是显而易见/约定俗成/正常(正确)思维的人都会这样想/这样做的事,没必要说明”,但请想好“正确思路下制作的结果不会存在这个BUG”。而且人和人不一样,出BUG的地方也会千差万别。如果问题仍未解决,请在今年的帖子里补充问题细节。


                          IP属地:北京16楼2023-02-10 10:05
                          回复
                            已知坐标,想做一个曲线的缓动加颤抖,其中精灵的正方向始终指向运动方向。
                            请问一下怎么写,谢谢


                            IP属地:江西来自Android客户端17楼2023-02-12 18:09
                            收起回复
                              吧主大大好!一个关于安卓导出的问题:
                              Gms2 2022.9.0.49 无法导出安卓,JDK NDK SDK 密钥均配置(包括设置)完成,SDK33,报错如下:
                              (删去大部分输出的东西,红色的是我觉得重要的信息。我觉得问题主要是gradle上,但我不知道这是个啥,之前已经实现了安卓的导出,gradle的问题也遇到了但是不明不白地就解决了。更换系统后就不行了。本人更换过SDK,runtime,均为此报错,劳烦各位大佬解决!谢谢!)


                              IP属地:四川18楼2023-02-18 21:51
                              收起回复