如何在游戏中设置通知系统

时间:2011-06-24 22:01:10

标签: javascript jquery c++ html awesomium

我正在开发一款基于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)

关闭通知

现在,使用什么比使用更好的系统?

1 个答案:

答案 0 :(得分:0)

算法改进

  • 请勿使用静态标记。创建一个ID系统,以便您可以唯一地定位通知。
    • 在C ++中,您可以跟踪每当您发出新通知时自动递增的变量。 ID可以是#notification_#,其中#是您想要的ID。然后你的通知函数将发送它想要停止/启动的id,以及启动或停止它的参数。
    • 在JavaScript中,您可以在标记中创建间隔时嵌入id。我建议使用.data()。这样你就可以关掉它。

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);
        }
    }
}