我正在开发一款基于3D学习的游戏,主要使用C ++和Javascript。我正在尝试设计一个通知系统,以便当玩家将信息发送到他们的笔记本时。
我有一个系统设置,但主管认为它可以做得更好。这是我需要你帮助的地方!
它的基本方式:
玩家会做一些触发信息发送到笔记本的东西。在发生这种情况的同一方法中,我打开了通知。然后,通过闪烁图像的两个div(发出闪烁效果),通知将显示在播放器的屏幕上。当点击这些div中的任何一个时,它会向播放器显示笔记本。只要玩家查看或退出笔记本,通知就会关闭。
现在这是我正在使用的代码:
主GameState
int GameModeState::notify(int query)
{
static int notified;
if(query == 1)
{
notified = 1;
return notified;
}
if(query == 2)
{
notified = 0;
return notified;
}
else
{
return notified;
}
}
在GameState的更新功能
中// checks if the unviewed information notification needs to be on or off
if(notify(0) == 1) // supposed to be on
{
mScreen->executeJavascript("notebookNotification(1);"); // turns it on
} else {
int nothing = notify(2); // clears out notify to 0
mScreen->executeJavascript("notebookNotification(0);"); // turns it off
}
在我的JS中
var intervalID; // Needed to turn off setInterval()
//Function takes in 0 to turn off notification, anything else turns it on
function notebookNotification(setting)
{
if(setting == 0)
{
if(intervalID) {
// clears the blinking darkContainer
window.clearInterval(intervalID);
intervalID = null;
}
// hides both of the images
$("#lightNotificationContainer").hide();
$("#darkNotificationContainer").hide();
}
else
{
$("#lightNotificationContainer").show();
if(!intervalID) {
// "animates" the blinking of the notification; the darkContainer toggles on and off every second, and covers the lightContainer
intervalID = window.setInterval('$("#darkNotificationContainer").toggle()', 1000);
}
}
}
我会使用GameModeState::notify(2)
现在,使用什么比使用更好的系统?
答案 0 :(得分:0)
算法改进
#notification_#
,其中#
是您想要的ID。然后你的通知函数将发送它想要停止/启动的id,以及启动或停止它的参数。JS改进 (真的不是更好)
===
/ !==
代替==
/ !=
。如果您可以更具体,也可以避免使用truthy。代码:
var intervalID; // Needed to turn off setInterval()
//function takes in 0 to turn off notification, anything else turns it on
function notebookNotification(setting) {
if (setting === 0) {
if (intervalID !== null) {
// clears the blinking darkContainer
window.clearInterval(intervalID);
intervalID = null;
}
// hides both of the images
$("#lightNotificationContainer,#darkNotificationContainer").hide();
}
else {
$("#lightNotificationContainer").show();
if (intervalID === null) {
// "animates" the blinking of the notification; the darkContainer toggles on and off every second, and covers the lightContainer
intervalID = window.setInterval('$("#darkNotificationContainer").toggle()', 1000);
}
}
}