小编Jac*_*rby的帖子

如何从 Godot 3 中的 spritesheet 加载纹理

我昨天刚刚开始使用 Godot,我正在开始一个游戏。我为它画了一些精灵表。将动画的所有帧打包到一个图像文件中似乎效率更高,对吗?

无论如何,在 Godot 中,我有一个AnimatedSprite,它当然有一个SpriteFrames属性,或者它的名字。我想将我的 spritesheet 拆分成多个图像,以便我可以将每个图像用作动画中的单独帧,但据我所知,Godot 没有提供这样的功能。是这种情况吗?

我已经在网上搜索了一段时间的答案,但找不到任何相关的内容。

如果我不能在 Godot 中做到这一点,我会感到非常惊讶,因为我几乎可以在我见过的所有其他游戏引擎中做到这一点。

谢谢!

(只是为了澄清,我想(以编程方式或其他方式)在 Godot 中将 spritesheet 拆分为多个纹理。)

godot

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

连接字符串或使用多个回显参数:哪个更快?

假设我有两个 PHP 语句:

echo "foo"."bar"

echo "foo", "bar"
Run Code Online (Sandbox Code Playgroud)

请注意连接字符串的不同方式 - 使用 a.或 a ,

我意识到这两种方法之间的实际差异, using,为关键字提供了多个参数echo,而 using.实际上在 ing 之前将字符串连接在一起echo

但我的问题是,哪种方式更快?

php string performance concatenation string-concatenation

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

GLSL gl_Position 中的第四维是什么?

我正在学习 OpenGL,目前我正在编写一个着色器,但我很困惑为什么gl_Position变量是 avec4而不是 a vec3,正如我所期望的。我当然希望这样做,因为它使用 3D 空间,而不是 4D。

我希望我至少正确地假设 的前三个字段gl_Position确实是位置的 x、y 和 z 坐标。

如果我的问题还不够清楚:gl_Position.的第四个字段是什么?

顺便说一下,我使用的是 OpenGL 3.2 和 GLSL 1.5。

opengl shader glsl perspectivecamera

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

为什么 NULL 不是有效的内存地址?

这可能听起来像一个愚蠢的问题,但因为在 C 中,NULL字面定义为

#define NULL 0
Run Code Online (Sandbox Code Playgroud)

为什么它不能是有效的内存地址?为什么我不能取消引用它,为什么任何数据都不可能位于内存地址 0 处?

我确信这个问题的答案是“前 n 个字节的内存总是由内核保留”,或者类似的东西,但我在互联网上找不到类似的东西。

我推理的另一部分是,这不是平台无关的吗?难道我不能发明一种新的架构,让进程可以访问内存地址 0 吗?

c null

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

在应用程序内分发空地文件

在开始之前,我知道 的存在GResource,但是我正在使用 gtkmm (C++),并且我不确定 GResource 是否适用于 C++。我找不到任何东西Glib::GResource,我已经找了一段时间了。

无论如何,我正在使用 Gtkmm 编写一个 GUI,并且我想打包在可执行文件中加载的 .glade 文件,以便可执行文件可以运行,而无需在其旁边有文件。我不确定我是否完全理解 GResources 是如何工作的,而且我在任何地方都找不到任何明确的说明。

那么,使用 Gtkmm,我如何将 .glade 文件打包到可执行文件中?

更新:我发现了这个。(Gio::Resource),听起来很有希望,但没有文档。

gtk3 gtkmm3

3
推荐指数
1
解决办法
1317
查看次数

GLib-GObject-CRITICAL ...断言“夸克> 0”失败

我对 Gtk 编程还很陌生。我正在使用 Gtkmm 库为我的应用程序编写一个简单的 GUI。

GUI 是一个更大的应用程序的一部分,它实际上编译成两个单独的可执行文件,但是我认为这无关紧要,因为这个问题只涉及两个可执行文件之一。

无论如何,我在client.cpp中有以下代码:

#include "client.hpp"

int main() {
    auto builder = Gtk::Builder::create();
}
Run Code Online (Sandbox Code Playgroud)

在 client.hpp 中,我只包含 iostream、glibmm.h 和各种 gtkmm 小部件头文件,以及 gtkmm/builder.h。

我的 makefile 一团糟,但它是:

CXXFLAGS= -std=c++14 -g
LDFLAGS=-lgmp -pthread $(shell pkg-config -libs gtkmm-3.0)
SERVER_EXE=server
CLIENT_EXE=client
CXX=g++
DIST_DIR=.
BUILD_DIR=./build

SERVER_CXXFLAGS=
CLIENT_CXXFLAGS=$(shell pkg-config --cflags gtkmm-3.0)

INCLUDE_DIRS=./include
INCLUDE_PARAMS=$(foreach d, $(INCLUDE_DIRS), -I$d)

SERVER_OBJECTS=rsa.o server_entry.o server.o
SERVER_OBJECT_PATHS=$(foreach o, $(SERVER_OBJECTS), $(BUILD_DIR)/$o)

CLIENT_OBJECTS=resources.o client.o
CLIENT_OBJECT_PATHS=$(foreach o, $(CLIENT_OBJECTS), $(BUILD_DIR)/$o)

all: $(SERVER_OBJECT_PATHS) $(CLIENT_OBJECT_PATHS)
    mkdir -p $(DIST_DIR)
    $(CXX) $(CLIENT_OBJECT_PATHS) -o $(DIST_DIR)/$(CLIENT_EXE) $(LDFLAGS)
    $(CXX) $(SERVER_OBJECT_PATHS) …
Run Code Online (Sandbox Code Playgroud)

c++ glib gtkmm gtk3

3
推荐指数
1
解决办法
1085
查看次数

暂时停止套接字的侦听

我正在使用 POSIX 套接字 API 用 C++ 编写服务器。

它作为 GUI 应用程序的一部分运行,该应用程序需要能够停止和启动服务器侦听数据并向客户端发送数据。

服务器的主要部分基本上看起来像这样(我排除了很多代码,因为其中一些代码与这个问题无关。)

if (listen(listener_fd, backlog) < 0) {
    std::perror("listen");
    exit(EXIT_FAILURE);
}

while (true) {
    /* This part sets up the FD set */
    FD_ZERO(&read_fds);
    FD_SET(0, &read_fds); // stdin (for server commands)
    FD_SET(listener_fd, &read_fds);
    FD_SET(read_pipe, &read_fds);
    for (auto it = client_socks.begin(); it != client_socks.end(); it++) {
        FD_SET(*it, &read_fds); // listen on each of the open client-server sockets
    }

    max_fd = 0;
    if (client_socks.size() > 0) {
        max_fd = *std::max_element(client_socks.begin(), client_socks.end());
    }
    if …
Run Code Online (Sandbox Code Playgroud)

c c++ sockets network-programming

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