Cheerp是C / js / wasm转译器。 Screeps是一款编程视频游戏。

如何从已编译的C++代码中读取 Game.time 变量? (在爬行中)

#include <cheerp/client.h>
#include <iostream>
using namespace std;

namespace client {
    class Game : public Object {
    public:
        static volatile double time;
    };

    extern volatile Game &Game;
}

void webMain() {
    cout << __TIME__ << ": The current time is: " << client::Game.time << endl;
}

我已经尝试了多种变体:
  • externvolatilestatic
  • 引用和指针
  • clientcheerp命名空间
  • 继承自Node / Object
  • int32_t vs double vs float作为
  • 类型

    我似乎得到:
  • NaN
  • 0
  • 1
  • 致命代码中的致命类型处理错误

  • 如何在C++代码中与Javascript对象和变量正确接口(interface)?至少可以说,cheerp文档非常稀疏...

    注意:cheerp实际上从来不会生成正确的Javascript。关于Game对象的处理方式始终存在一些不一致之处,并且在许多情况下,它错误地尝试将Game.d索引为数组而不是Game.time

    最佳答案

    client命名空间中声明的类不应具有成员字段。

    要访问外部JS对象的属性,您需要添加以get_set_开头的方法,以分别读取和写入该属性:

    #include <cheerp/client.h>
    #include <iostream>
    using namespace std;
    
    namespace client {
        class Game : public Object {
        public:
            double get_time();
        };
    
        extern Game &Game;
    }
    
    void webMain() {
        cout << __TIME__ << ": The current time is: " << client::Game.get_time() << endl;
    }
    
    
    

    另外,您无需在此处使用volatile。

    10-04 16:07