Articles of 消息

如何通过单个事件最好地解决多个组件修改?

我试图通过一个事件来解决多个组件的修改。 有没有更好的方法来处理这个问题? 我有一个标签实体,关心盾牌实体的生命值组件何时被修改(损坏,再生等)。 标签将需要更改 其文本显示当前屏蔽剩余的百分比。 其文本颜色来显示屏蔽剩余的严重性。 当我的ShieldSystemparsinghitPoints组件时,运行下面的代码。 对于我计划倾听的eahtypes的修改,我需要为for -loop添加一个新的if -statement。 这意味着如果不止一个人想要修改任何监听的文本组件,sprite组件等,系统之间有一堆重复的代码。 for(int i =0; i < listeners.size(); i++) { if(listeners.count(MessageType::CHANGE_TEXT) == 1) { std::vector<Entity*> entities = listeners[MessageType::CHANGE_TEXT]; for(int j; j < entities.size(); j++) { Entity* e = entities[j]; MessageInfo* messageInfo = new MessageInfo(MessageType::CHANGE_TEXT, e, "Some Text"); MessageCenter::Dispatch(messageInfo); } } // Add an If(listeners.count(MessageType::CHANGE_TEXT_COLOR)… // Add […]

如何通过BungeeCord / Bukkit插件消息传递参数

我试图从Bukkit发送一个插件消息到BungeeCord,但是不知道如何发送参数。 这里是Bukkit插件的代码,它发送消息: ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF("BungeeCord"); out.writeUTF("Argument"); // If you don't care about the player // Player player = // Iterables.getFirst(Bukkit.getOnlinePlayers(), null); // Else, specify them Player plr = Bukkit.getPlayerExact("spacegeek224"); plr.sendPluginMessage(p, "BungeeCord", out.toByteArray()); 这里是我的BungeeCord插件主类中的代码: @Override public void onEnable() { this.getProxy(); ProxyServer.getInstance().getPluginManager().registerListener(this, new ChannelListener()); this.getProxy(); ProxyServer.getInstance().registerChannel("Return"); } 最后,这里是ChannelListener的代码: package net.spacegeek224.metro.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import […]

Unity C# – 移动对象和Debug.Log; 只显示多个邮件一次(简单但卡住)

我有以下情况: 一个球体正朝着它可以看见的一个物体(一个立方体)移动。 立方体在景观中随机移动。 球体将继续跟随它。 我有一个脚本,将检查如果立方体是在视线内。 如果是的话,它会向它走,它会继续跟着它。 我想要的是 我想要一个Debug.Log消息时显示: 当球体正朝着(新的)目标移动时。 它必须说:“search…” 当球体find立方体时,我想让它说:“find立方体”。 当find立方体时,我希望它继续search新的立方体。 所以必须再说一次:“search…” 问题: 它不断地显示这些消息。 我在IF语句中find了一个带有假布尔的解决scheme。 但是,我不知道如何组合2条消息。 码: using UnityEngine; using BehaviorDesigner.Runtime; using BehaviorDesigner.Runtime.Tasks; public class MoveTowards : Action { public float speed = 0; public SharedTransform target; private bool pietje; private bool jaap; void PrintMessage (string message) { Debug.Log(message); } void Start() { pietje […]

PHP浏览器游戏私人消息?

首先,我在这里问这个问题,因为游戏和消息传递是密切相关的。 为什么赢,如果你不能幸福? 不过,如果这个问题需要转移到溢出的话,我也不会被冒犯。 我需要一个用于我的浏览器游戏的PM系统,它已经有了一个用户和authentication系统(为了澄清:游戏已经有一个用户系统)。 具体来说,我想知道如果一个PHP库已经存在,我可以用来节省一些时间。 更好的是,如果有人知道一个好的Codeigniter库用于消息传递,那将是完美的。 我已经有了一个很好的主意,如果我必须写自己的,我将如何处理这个问题,但似乎已经存在一个强大的forms(尽管我的谷歌search失败了)。 要求: 消息可以发送给个人,多个用户和公会队友(基本上只有多个用户在服务器端select对象)。 用户可以回复个人或所有收件人 邮件显示在发件人的发件箱和收件人的收件箱中。 利用一些2表devise来处理逐个用户的标记读取/删除消息 消息是半线程的。 也就是说,我不一定让它们在GUI中显示为线程,但是之前的消息应该包含在回复的底部。 也许更好的说,以前的消息是可识别的和可访问的。 (这个,我还没有100%确定如果我写我自己的,我会怎样deviseIE是否把上一条消息的文本包含到新消息中,或者记住之前消息的数据库ID以便以后连接) 使用技术: PHP,Codeigniter,Javascript,JQuery,Ajax,Sqlite 注意:我已经看到有关于溢出的一些类似的问题,但在回答部门帮助很less。 否则,人们正在寻找聊天框或更多的呃..就像社交媒体网站线程,我发现有点不同,你会发现在游戏中的东西。

只有通过键盘控制的平台游戏中closures对话框的最佳方式是什么?

我在空闲时间开发了一个闪光拼图平台游戏,我决定如何实现一个function。 游戏将仅通过键盘控制,没有鼠标可用。 我的游戏将有对话框,用于讲故事,宣布事件,教程提示等。我真的不想让玩家在显示对话框时播放大部分屏幕。 所以我的方法是popup对话框并暂停游戏,直到玩家closures对话框。 这是因为游戏有一个小的分辨率(640 x 320)和一些对话框非常大(最多5行文字,说话者的缩略图等)。 编辑:我想暂停游戏的另一个主要原因是,我想100%确定玩家不会错过对话。 另外,我希望她在某个水平的地方阅读, 然后再去参观另一个水平的地方,或者做一些能够推进情节的事情。 事情是我找不到一个方法来使这个工作正确。 在和几个朋友testing游戏之后,我不满意我得到的反馈。 如果我强迫他们用一个特定的按键(ACTION)closures对话框,我会看到有人随机按下按键(例如FIRE或JUMP键),而他们知道它是用ACTIONclosures的,就像他们在2分钟前那样。 他们最终会closures对话,但我可以看到他们有点沮丧。 我不认为他们采取的控制速度如我所料。 如果我让他们用ANY键closures对话框,他们发现自己错误地closures了对话框。 一些对话框正在popup,而他们不期待它。 所以我开始认为,“暂停对话 – closures它恢复”可能是一个坏主意。 你以为是? 或者可以让对话暂停,但是我只需要find正确的方法呢? 也许问题不是控件,而是其他的东西,比如说,我不应该意外地popup对话框? 你有什么样的游戏做对吗?

什么是黑板?

我为我的游戏实施一个实体系统。 我正在瞄准一个更大的程序化世界。 世界将由人工智能实体填充,“屏幕”和“近屏”实体将定期更新,而“远处”实体有时只会更新。 我最初的想法是实现一个消息队列…在循环中填充,并在循环后调用,但在下一个循环之前。 然后我读到这里 ,有一个答案提到黑板(12票),但我一直没有find任何详细的黑板上。 问题是,他们究竟是什么,以及与消息队列相比使用它们会获得什么? 我select的语言是CSharp。

如何使用组件消息传递系统实现强大的打字?

我正在考虑在实体组件系统中实现一个消息系统。 我推断我可以使用事件/队列来传递消息,但现在,我只是使用一个通用的对象,并把我想要的数据。 我也考虑用字典。 我看到很多关于这方面的信息,但都涉及到大量的猜测和猜测。 有没有办法做到这一点,并保持强大的打字我的消息?

游戏消息系统devise

我正在做一个简单的游戏,并决定尝试实现一个消息系统。 该系统基本上是这样的: 实体生成消息 – >消息被发布到全局消息队列 – > messageManager通过onMessageReceived(消息消息)通知每个消息的新消息 – >如果对象想要,它作用于消息。 我做消息对象的方式是这样的: //base message class, never actually instantiated abstract class Message{ Entity sender; } PlayerDiedMessage extends Message{ int livesLeft; } 现在我的SoundManagerEntity可以在onMessageReceived()方法中做这样的事情 public void messageReceived(Message msg){ if(msg instanceof PlayerDiedMessage){ PlayerDiedMessage diedMessage = (PlayerDiedMessage) msg; if(diedMessage.livesLeft == 0) playSound(SOUND_DEATH); } } 这种方法的优点: 非常简单和容易实施 该消息可以包含尽可能多的信息,因为您可以创建一个新的消息子类,它具有任何必要的信息。 缺点: 我不知道如何将Message对象回收到对象池 ,除非我为Message的每个子类都有不同的池。 所以我有很多很多的对象创建/内存分配随着时间的推移。 […]