问题标签 [melonjs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
53 浏览

javascript - 闭包意外返回未定义

我正在创建一个 melonJS 游戏。

在我的播放器实体 -game.PlayerEntity = me.ObjectEntity.extend({中,它的更新函数检查碰撞:

然后在我的NPC实体对象中game.NPCEntity = me.ObjectEntity.extend ({,我想回到settings.name上面的PlayerEntity。所以为此我创建了一个闭包returnSettings()

1)console.log(settings.name)按预期输出“Lee”

2)return settings.name输出“未定义”

为什么是这样?

谢谢!

0 投票
1 回答
133 浏览

javascript - CSS定位问题

我正在使用 melonJS 创建游戏。我想在 NPC 上动态定位对话框。

在全屏下,它看起来不错。

在此处输入图像描述

当我缩小视口时,定位保持绝对,因此看起来很糟糕。但是如果我不定位绝对,我将无法将它相对于 NPC 的坐标放置:

$("#dialogBox").css({top: game.data.currentNPC_y+50, left: game.data.currentNPC_x-50, position:'absolute'});

在此处输入图像描述

有什么办法吗?


编辑:

当我使用以下代码时,代码不会像上面提到的那样缩放,但至少它仍然在 NPC 附近和画布上:

在此处输入图像描述

当我使用您建议的代码时,它出现在画布之外:

在此处输入图像描述

0 投票
1 回答
964 浏览

javascript - RPG - 为半复杂树结构存储玩家数据

我正在用 js 制作一个 web RPG,使用 melon JS 和 SQL DB 和 PHP。这个问题是关于如何存储每个非玩家角色 (NPC) 的已完成任务和当前任务。

NPC对话和任务数据:所有对话都存储在一个js对象中,结构如下:

没有将所有地图对话框存储在同一个文件中,因为文件会变得太杂乱......所以相反:当地图更改时,我使用一组新对话框js_require加载新文件:js

在此处输入图像描述

任务编号:当创建一个新的 NPC(类game.NPCEntity)时,我为每个名为 的 NPC 实例创建一个局部变量taskNum,设置为 0。当他们完成任务时,我只需访问并增加该 NPC 的任务编号:

对于这个 RPG,我想实现以下目标:

  • GTA 风格的自由世界任务队列:等级进度、任务进度和每个 NPC 进度的任务是线性的(完成第 1 级到第 2 级等),但对于每个 Quest,会生成一组 NPC...(您可以将它们视为子任务),每个包含 1 到 n 个任务。我想建立任务队列的灵活性,允许玩家以任何顺序与任何生成的 NPC 交谈……并以线性顺序完成任务(任务 1,然后 2,然后 3……)。这就像 GTA 风格,因为整个游戏遵循线性进程,但让您可以通过与世界上随机的人交谈来灵活地开始任何您想要的任务。

  • 游戏数据:游戏应存储当前已完成的关卡、每个关卡的任务名称、每个任务的 npc 名称以及每个登录玩家 ID 的每个 npc 名称的任务。它应该加载以下树(红色 = 完整):

在此处输入图像描述

我的问题

  • 当游戏加载时,它应该记住我在上面树中提到的那些东西。我已经设置了数据库以加载级别和任务信息(我只是从数据库返回当前级别和任务编号,然后循环遍历NPC dialog上面显示的结构,将值存储在 acurrentAndCompleteLevelscurrentAndCompleteQuests数组中,直到循环达到当前级别和任务num from DB)...以及玩家的坐标和经验...

但是,由于我允许玩家随时开始、暂停和恢复任何 NPC 任务列表,因此我无法真正在数据库中添加npc completed numtasks completed num列。这是因为我无法以与获取信息NPC dialog相同的方式遍历结构和加载,因为您完成 NPC 任务的顺序不是线性的。不知何故,我必须跟踪每个 NPC 完成的任务数量。我怎样才能做到这一点?levelquest

我正在考虑创建一个新NPCData表来存储游戏中的所有 NPC,然后current task num为那个 NPC 存储......但是我必须为任何登录到我的游戏的新玩家创建一个新条目。

或者也许在userstats表中创建两个 DB 列,currNPC然后currTask循环遍历存储每个 NPC 的所有任务的关联数组?但是我需要为每个已完成的 NPC 和每个 NPC 完成的任务创建一个列。哦,我的头在旋转。

当前数据库架构:

在此处输入图像描述

0 投票
1 回答
497 浏览

javascript - 以编程方式在 melonJS 中插入实体

我一直在研究 melonJS 教程,同时牢记我的应用程序。

我希望能够以编程方式添加实体,而不是在为每个级别加载的 .tmx 文件中指定它们。这在 melonJS 中是否可行,或者必须使用平铺编辑器指定实体?这似乎相当严格。

或者 melonJS 只是此类任务的错误框架,如果是这样,是否有另一个框架可能比仅在画布上绘图更好?

0 投票
1 回答
220 浏览

javascript - 如何暂时禁用角色移动 MelonJS?

我正在使用 Melon.Js 开发游戏,并在加载它的画布上创建一个聊天窗口。问题是,当我输入 时,如果我按 AWDS 键,字符会移动。有谁知道如何暂时禁用(只要聊天窗口焦点)角色移动?

“游戏.html”

“播放器.js”

我尝试在输入中使用“焦点”,但我无法禁用 MelonJS 画布中的动作

0 投票
1 回答
2079 浏览

javascript - 基于六边形网格的html5/canvas游戏框架

我正在开发基于六边形网格的 html5 游戏。

经过一番调查,我使用过:

MelonJS + Tiled +这个棘手的事情。在这个组合中一切似乎都很好,直到我开始考虑动态显示一些六边形,我的玩家将能够去。有几个想法浮现在脑海:

  • 计算坐标并在画布上绘制跳过 melonjs,但从架构的角度来看这是个坏主意。

  • 为每个六边形纹理对象添加自定义属性,但是手动操作太多。

  • 为 melonjs 添加一些外观以便使用它,或者它可能已经完成?

所以我的问题是:

在这些技术范围内解决这个问题的最佳方法是什么,或者我应该使用其他工具?

0 投票
1 回答
793 浏览

javascript - 将局部(视口相对坐标)转换为全局(图层坐标)

我正在尝试将视口坐标转换为全局(图层)坐标。

我已经尝试过docs中描述的方法,但似乎不起作用:

我有,反之亦然组合(将全局转换为本地):

为什么我认为 me.game.viewport.localToWorld 不起作用?因为对于我的实体,当我点击它时,我的坐标有很大的差异(比如超过 200 个点)。

代码片段:

所以我的问题是:

如何将视口坐标转换为第一层,类似于将全局坐标转换为局部坐标?

0 投票
1 回答
76 浏览

javascript - TypeError: game.HexRenderer 不是 Linux Mint 上的构造函数

我有:

HexRenderer.js:

播放.js:

索引.html:

代码基于 melonjs教程

启动时我看到:

TypeError:game.HexRenderer 不是构造函数

问题是在 Windows 中一切正常,但在 Linux Mint 上不起作用(在最后一个 chrome 和 firefox 版本中尝试过)。

这是什么诡计吗?有什么区别,它与操作系统有何关系?

0 投票
1 回答
291 浏览

melonjs - MelonJS 调试模式

我正在使用 melonJS ( v3.x ) 来开发我的 HTML5 游戏。

在调试模式下一切正常(http://something:8000/#debug),但如果我在没有调试面板的情况下进行测试(http://something:8000/),我的场景已加载并渲染,但没有我的事件工作(keyBind、pointerBind 等)。

我不知道问题出在哪里。我的日志中没有错误,我的萤火虫中也没有。同样,在调试模式下一切正常。有什么帮助吗?

编辑

我的事件也可以正常工作,它们在调用时会被触发。问题似乎来自从未更新的场景......

0 投票
1 回答
188 浏览

melonjs - MelonJS 手动触发事件

我正在用 melonjs 制作 HTML5 游戏。我的一个实体(称为 ET1)需要监听 2 个事件:pointerup 和 pointerdown。我的事件在我的 game.js 文件中注册,如下所示:

在我的 ET1 实体中,我正在监听这两个事件:

当pointerdown事件被触发时,我正在更新一个本地属性,如果这个属性达到某个值,我想从update方法手动触发pointerup事件:

我现在可以使用带有 registerPointerEvent 回调的 event.publish,但我不知道如何通过实体更新方法执行此操作。任何想法 ?