我对C语言中的SDL没有任何问题,但它有点累人.使用结构做没有类的东西,或者更糟糕的是,不得不自己将这些函数包装在一个类中等等.我想知道是否有一个好的,成熟的,设计良好的(即没有宏,使用模板和STL)包装器(绑定) ?)SDL?
我需要为我的角色扮演游戏创建一个文本框/消息框/状态框等。我已经创建了一个文本框类,但它似乎不起作用。它会传输表面但不显示任何文本。
代码:
class TextBox(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.initFont()
self.initImage()
self.initGroup()
self.setText(['a','b'])
def initFont(self):
pygame.font.init()
self.font = pygame.font.Font(None,3)
def initImage(self):
self.image = pygame.Surface((200,80))
self.image.fill((255,255,255))
self.rect = self.image.get_rect()
self.rect.center = (0,0)
def setText(self,text):
tmp = pygame.display.get_surface()
x_pos = self.rect.left+5
y_pos = self.rect.top+5
for t in text:
x = self.font.render(t,False,(0,0,0))
tmp.blit(x,(x_pos,y_pos))
x_pos += 10
if (x_pos > self.image.get_width()-5):
x_pos = self.rect.left+5
y_pos += 10
def initGroup(self):
self.group = pygame.sprite.GroupSingle()
self.group.add(self)
Run Code Online (Sandbox Code Playgroud) 到目前为止,我一直在 google 上搜索,但还没有找到一个全面的好教程。有谁知道教Win32 GDI的任何好的网站或书籍?
我需要传递类似指针的东西,它将任何东西作为函数参数.你知道,没有任何预定义类型或类型的东西可以采取这样的事情:
void MyFunc( *pointer );
Run Code Online (Sandbox Code Playgroud)
然后使用它像:
char * x = "YAY!";
MyFunc(x);
int y = 10;
MyFunc(&y);
MyObj *b = new MyObj();
MyFunc(b);
Run Code Online (Sandbox Code Playgroud)
而且我不想使用模板,因为我在我的项目中主要使用C语言.除了函数宏之外,还有什么可以在这里使用吗?
我知道Gdk-Pixbuf支持png和jpg,但是我找不到Internet上任何完全(或部分)支持的图像格式的确切列表。这对于我当前的项目是必要的,因为我需要检查目录中每个文件的扩展名并确定gdk-pixbuf是否支持该文件。有什么帮助吗?
如果我希望在窗口关闭时调用某些函数,我会连接delete_event.如果我希望在用户最小化Gtk窗口时调用该函数,我应该连接什么.像这样的东西:minimize_event?我在文档中找不到任何内容.
假设我有这个函数,它是一些gui工具包的一部分:
typedef struct _My_Struct My_Struct;
/* struct ... */
void paint_handler( void* data )
{
if ( IS_MY_STRUCT(data) ) /* <-- can I do something like this? */
{
My_Struct* str = (My_Struct*) data;
}
}
/* in main() */
My_Struct s;
signal_connect( SIGNAL_PAINT, &paint_handler, (void*) &s ); /* sent s as a void* */
Run Code Online (Sandbox Code Playgroud)
由于paint_handler也将由GUI工具包的主循环与其他参数一起调用,因此我不能总是确定我接收的参数将始终是指针s.
我可以IS_MY_STRUCT在paint_handler函数中执行某些操作来检查我收到的参数是否可以安全地返回到My_Struct*?
我一直认为a std::string是作为C char数组字符串的STL包装器实现的.但仔细观察设计,我注意到它没有任何提示或标志是一个被包裹的c字符串.对于我所知,我std::string可以在内部做任何事情!
c_str()当然有一种方法我认为它返回了内部char数组,但是如何知道该方法是否不会从它存储的任何数据中创建一个新的 c char数组并返回它?
说真的,如何std::string实施?它(看起来像)只是C char数组的包装器,还是别的?还是两者的混合?甚至可以成为两个有条件的?
是否必须始终为您的应用程序构建和注册新的WNDCLASS(EX)?然后使用lpszClassName作为主窗口?
是不是有一些我们可以用于主窗口的预建类名,比如按钮和文本框等的"按钮"和"编辑"?
我知道C#代码可以在运行时使用C#编译.但是,因为我几分钟之前就读过它,所以我非常不稳定.我通过例子学到了很多东西.所以告诉我.如果我想编译类似的东西:
// MapScript.CS
String[] LevelMap = {
"WWWWWWWWWWWWWWWWWWW",
"WGGGGGGGGGGGGGGGGGW",
"WGGGGGGGGGGGGGGGGGW",
"WWWWWWWWWWWWWWWWWWW" };
Run Code Online (Sandbox Code Playgroud)
并在我的代码中使用此数组,我该怎么做呢?
在伪代码中我想做这样的事情:
Open("MapScript.CS");
String[] levelMap = CompileArray("levelMap");
// use the array
Run Code Online (Sandbox Code Playgroud)