小编esc*_*ter的帖子

从Visual Studio中的头函数生成代码函数的快捷方法?

这可能是一个小问题,但解决方案可以节省我很多时间并防止错误.

我正在使用Visual Studio中的C++项目.如果我在头文件中的类中定义一个函数,比如说

void InitButton(int ButtonNum);
Run Code Online (Sandbox Code Playgroud)

我通常将签名复制并粘贴到cpp文件中.然后,我插入类名,并用大括号替换分号,如下所示:

void Button::InitButton() { 
}
Run Code Online (Sandbox Code Playgroud)

但是,我经常会忘记类名,或者在返回类型之前意外地输入它.对于我需要在代码中定义的任何静态变量,也会发生这种情况.这看起来很小,但是因为我处于项目的开始阶段,所以堆积起来.有没有更快的方法在Visual Studio C++中自动生成这些?或者我错过的最佳做法?

编辑:以前有人问过:在Visual Studio C++ 2010中自动创建实现

编辑2:对我来说最好的解决方案出现在这里:http://www.radwin.org/michael/2011/05/10/stubgen/

c++ visual-studio

14
推荐指数
2
解决办法
3万
查看次数

在 C++ 中,不同的游戏实体应该有不同的类吗?还是应该在一个包含所有行为的类中?

我正在开发一个具有许多不同实体的游戏环境。每一个都有一些常见的功能(绘制、更新等),但有时游戏必须根据敌人的类型对它们进行不同的处理。到目前为止,我已经在他们的实例的类中编码了敌人的“类型”。所以,我们有这样的情况:

class MotionObject { ... };

class Entity : public MotionObject { ... };

class Coin : public Entity { ... };

class TextSign : public Entity { ... };

class ShapeEnemy : public Entity { ... };

class Attractor : public ShapeEnemy { ... };

class Bumper : public ShapeEnemy { ... };
Run Code Online (Sandbox Code Playgroud)

因此 Coin、TextSign、Attractor 和 Bumper 类是游戏中实例化的实体类型。为不同类型的实体使用不同的类感觉是正确的,但我无法摆脱这样的感觉,如果我只有一个实体类,可能会避免一些麻烦,其中包含一个 switch 语句,根据其“实体类型”控制其行为,存储在变量中的东西。玩家根据它们的类型以不同的方式与这些实体交互,我每次都使用 dynamic_cast 和空测试来确定应用了哪种行为。需要明确的是,这些是针对我无法在每个实体上调用简单 Update() 的行为;玩家将以特定方式做出响应,或者他们将进行实体间交互,所有这些都基于实体类型。我的代码如下所示:

void Game::Update(float deltaT) {

    for (int i =0; i < DrawChildren.size(); i++) {
        //each entity …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance game-engine

5
推荐指数
1
解决办法
1061
查看次数

在 Python 中替换 SVG 的内部内容

我有一个 svg 模板,我正在复制和自定义该模板,以便为游戏创建多个不同的卡片和图块。我想以编程方式(最好在 Python 中)更改每张卡片模板中的元素。我似乎很容易找到更改属性或 css 的方法,但是我很难找到一个可以轻松解析现有 svg 并替换元素的库。

我的模板的 svg 看起来有点像这样:

<!--Square 2" Tile Template -->
<svg xmlns="http://www.w3.org/2000/svg" width="181" height="181">
    <text id="tile_text" y="90" width="100%" 
          style="text-align:center;font-family:Verdana;font-size:20">
        TEXT TO REPLACE
    </text>
</svg>
Run Code Online (Sandbox Code Playgroud)

我看过 Python 的lxmlxml.dom.minidom但它们似乎都不支持tile_text_element.innerHTML = "New Tile Name". 帮助?

编辑:

为了补充一点我的工作流程,我为每张卡片创建了一堆个性化的 svg,然后通过inkscape 将它们批量渲染为 pdf。

python xml svg dom

5
推荐指数
1
解决办法
3942
查看次数

如何将cv :: Mat类型从CV_16UC1转换为CV_8UC1

我有一个CV_16UC1类型的cv :: Mat图像,我需要它在CV_8UC1中,所以我可以在它上面运行cv :: integral.我并不担心转换过程中的溢出 - 基本上我只想将图像从unsigned short批量转换为unsigned char.

我在别处问过,有人建议使用cvtColor,但我不知道要使用什么转换代码.

c++ opencv

4
推荐指数
1
解决办法
1万
查看次数

重构python函数以返回元组而不是单个变量的最佳实践?

我在大型代码库中重构python函数.目前,它看起来像:

def GetEvents(file_path):

    ...

    return events #a list of Event objects
Run Code Online (Sandbox Code Playgroud)

一堆代码依赖于此函数已经返回列表对象.但是,我想重构它,所以它返回:

def GetEvents(file_path):

    ...

    return (events, event_header)
Run Code Online (Sandbox Code Playgroud)

event_header是对这组事件的一点描述.但是,这将严重破坏当前需要列表的所有代码,而不是返回元组.在任何其他语言中,我都会通过引用传递event_header,但我不认为我可以在Python中这样做.我还可以声明另一个函数Ge​​tEventsAndHeader(),但是这个函数很难复制.

建议?

python tuples return-value

2
推荐指数
2
解决办法
685
查看次数

隐式调用struct析构函数 - 我的语法错了吗?

在下面的代码中,结构的析构函数FileWrapper由程序调用,而我没有明确要求它.我怎么能阻止这个?

struct FileWrapper {
    std::fstream* capture_file;
    std::string filename;
    FileWrapper(std::string _filename = "./capture.dat", bool overwrite = true) {
        filename = _filename;

        std::ios_base::openmode mode = std::fstream::binary | std::fstream::in | std::fstream::out | std::fstream::trunc;

        capture_file = new std::fstream(filename, mode);
        if (!capture_file->is_open()) {
            std::cout << "Could not open capture file.\n";
        }
    }

    void close() {
        std::cout << "closing file.\n";
        capture_file->close();
    }

    ~FileWrapper() {
        close();
    }
};

void test_file_open() {
    FileWrapper fw = FileWrapper("./fw-capture.dat");
    //Odd behaviour: fw destructor called before or during the following …
Run Code Online (Sandbox Code Playgroud)

c++ struct class

0
推荐指数
1
解决办法
103
查看次数

在 Unity 中,我想将一些纹理从 .tga 批量转换为 .png 并更新引用

我有一个正在制作原型的资源包,它使用一些高质量的 tga 纹理(分辨率为 2048x2048)。其中有 250 个,这意味着我的 Asset 文件夹非常大。我知道对于某些渲染情况,.tga 比 .png 更好,但对于我的用例,可移植性比纹理质量更重要。

我想将所有这些 .tga 转换为 .png,然后更新所有材质引用以使用新的 .png。删除旧的 .tga 完全没问题 - 我不需要保留它们。我知道如何轻松批量转换图像;我只想更新 .mat 文件中的引用以使用新纹理。

纹理全部用于使用标准着色器的材质,并且用于反照率、金属、法线贴图或遮挡字段。没有我需要更新参考的奇怪的自定义着色器。

有没有一种自动化的方法来做到这一点?

unity-game-engine

0
推荐指数
1
解决办法
3558
查看次数