我以前的相关问题是逆向工程旧油漆程序
我在这里建立了我的运营基地:http://animatorpro.org wiki即将推出.
好的,现在我有300,000行传统的MSDOS代码库.这有点"小心你想要的"情况.我不是一位经验丰富的C程序员.我也不是完全缺乏经验,但出于所有意图和目的,我对语言是一个菜鸟,特别是它的图书馆的复杂性.我特别不了解专门为MSDOS编写的C程序与跨平台程序之间差异的变幻莫测.但是我已经研究了这个代码库超过一年了,这就是我对Animator Pro的了解:
使用的编译器和工具:
大部分编译似乎都是由批处理文件驱动的.虽然我已经获得了所有这些工具的副本,但我还没有成功编译它.(虽然我编译了它的哥哥,autodesk animator original.
它有一个插件系统,可以在DLL可用之前复制DLL,基于REX.插件系统处理:
它有自己的脚本解释器,名为POCO,基于C语言 - 脚本语言有足够的能力来完成插件系统可以做的几乎所有事情 - 只是更慢.
鉴于此信息,这是我的发展计划.请批评这个.源代码可在上面的链接中找到,因此如果您愿意,可以轻松地自己评估情况.
任何人都有问题吗?allegro是个不错的选择吗?如果没有,为什么?你会对这个插件系统做些什么?你会做什么不同的?这整件事是愚蠢的吗?我应该从头开始重写它,使用原始的灵感吗?(显然需要原始开发人员"大约一个月"才能做到这一点)
我上面没有提到的一件事是文本/字体系统.不知道该怎么办,但Animator Pro有自己的自定义字体格式,但也可以使用Postscript Type 1字体和其他一些格式.
我尝试
使用
编译器标志在MinGW 4.7.1 (在Win 7上使用Code :: Blocks 12.11 )编译(Allegro 5)
(在Project :: Linker settings :: Other linker settings中写入它们):
-static-libgcc
-static-libstdc ++
结果:
无法识别的命令行选项'-static-libstdc ++'
怎么解决?
我一直在研究这几个小时,但没有用.基本上我有
struct rectangle {
int x, y, w, h;
};
rectangle player::RegionCoordinates() // Region Coord
{
rectangle temp;
temp.x = colRegion.x + coordinates.x;
temp.w = colRegion.w;
temp.y = colRegion.y + coordinates.y;
temp.h = colRegion.h;
return temp;
}
// Collision detect function
bool IsCollision (rectangle * r1, rectangle * r2)
{
if (r1->x < r2->x + r2->w &&
r1->x + r1->w > r2->x &&
r1->y < r2->y + r2->h &&
r1->y + r1->h > r2->y)
{
return true;
}
return false; …Run Code Online (Sandbox Code Playgroud) 我想玩Allegro库,但我似乎无法让我的测试项目正确链接.确切地说,我收到cannot find -l<...>错误,<...>我指定使用的文件在哪里target_link_libraries.(详见下文.)
为了记录,我并不是所有关于构建过程的知识,我通常采用的方法是"单击一个按钮,希望弹出一个可执行文件,如果没有,则依靠试错." 我在这里发现了很多类似的问题,但似乎问题或解决方案与我所遇到的不同.我希望有一个明确的"这就是你做错了什么,而这就是做什么".
那就是说,这是我的项目结构:
/include
/lib
/src
main.cpp
CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
我从Allegro二进制包复制的include和lib目录,lib是所有.a文件所在的位置.
这是我的CMakeLists.txt所说的:
cmake_minimum_required(VERSION 3.2)
project(AllegroTest)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -static-libgcc -static-libstdc++ -fpermissive")
add_definitions( -DALLEGRO_STATICLINK )
file(GLOB SOURCES src/*.cpp)
set(SOURCE_FILES ${SOURCES})
add_executable(AllegroTest ${SOURCE_FILES})
include_directories(include)
target_link_libraries(AllegroTest
liballegro-5.0.10-static-mt.a
liballegro_acodec-5.0.10-static-mt.a
liballegro_audio-5.0.10-static-mt.a
libvorbisfile-1.3.2-static-mt.a
libvorbis-1.3.2-static-mt.a
liballegro_color-5.0.10-static-mt.a
liballegro_dialog-5.0.10-static-mt.a
liballegro_font-5.0.10-static-mt.a
liballegro_image-5.0.10-static-mt.a
liballegro_memfile-5.0.10-static-mt.a
liballegro_physfs-5.0.10-static-mt.a
liballegro_primitives-5.0.10-static-mt.a
liballegro_ttf-5.0.10-static-mt.a
libdumb-0.9.3-static-mt.a
libFLAC-1.2.1-static-mt.a
libfreetype-2.4.8-static-mt.a
libogg-1.2.1-static-mt.a
libzlib-1.2.5-static-mt.a
libopenal-1.14-static-mt.a
)
target_link_libraries(AllegroTest
libgdiplus.a
libuuid.a
libkernel32.a
libwinmm.a
libpsapi.a
libopengl32.a
libglu32.a
libuser32.a
libcomdlg32.a
libgdi32.a
libshell32.a
libole32.a
libadvapi32.a
libws2_32.a
libshlwapi.a …Run Code Online (Sandbox Code Playgroud) 我和朋友正在开发2D游戏,其中图形将是.svg文件,我们将通过首先光栅化它们或者直接在曲面上渲染它们来适当地缩放它们(在某些时候仍然需要光栅化).
问题是,我一直在寻找一个能够让我获取.svg文件并最终在allegro中呈现它的库.据我所知,它会将光栅化纳入某种格式,即allegro可以阅读,然后allegro可以呈现"扁平化"的图像.
那么我可以使用哪些C++库来获取.SVG文件并"展平"它以便我可以渲染它?库显然也需要支持缩放,所以我可以缩放矢量图形然后栅格化它.
我正在使用Windows和Visual C++ Express 2010.
任何建议都会有所帮助,因为我现在很迷茫:
我试过Cairo,但它只允许写.svg文件,不允许你读.svg文件.我也研究了与Cario一起使用的librsvg,但是我在Windows上正常工作时遇到了很多麻烦(因为它有大量的GNOME依赖).如果您有任何指南可以使这些工作(在Windows上)也很好.
我是从Allegro 5开始的,但很快我就陷入了第二个类似hello-world的程序中.经过一些调试后,我得出结论,程序在调用函数时崩溃了al_clear_to_color(ALLEGRO_COLOR).我已尝试静态和动态地链接allegro,但问题仍然存在.我完全迷失了.
这是代码:
#include <cstdio>
#include <allegro5/allegro.h>
int main() {
ALLEGRO_DISPLAY *display;
ALLEGRO_KEYBOARD_STATE kbState;
if(!al_init())
return 0;
if(!al_install_keyboard())
return 0;
display = al_create_display(800, 600);
if(!display)
return 0;
do {
al_get_keyboard_state(&kbState);
al_clear_to_color(al_map_rgb(255, 255, 255));
al_flip_display();
al_rest(0.5);
} while(!al_key_down(&kbState, ALLEGRO_KEY_ESCAPE));
al_destroy_display(display);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
替换线
al_clear_to_color(al_map_rgb(255, 255, 255));
Run Code Online (Sandbox Code Playgroud)
为线
al_clear_to_color(tempClearColor);
Run Code Online (Sandbox Code Playgroud)
声明
ALLEGRO_COLOR tempClearColor = al_map_rgb(255, 255, 255);
Run Code Online (Sandbox Code Playgroud)
在循环开始之前,它确实有效,但在函数崩溃时
al_destroy_display(display);
Run Code Online (Sandbox Code Playgroud)
叫做.
调试器返回消息:
读取C:\ Program Files(x86)\ CodeBlocks\MinGW\bin\libstdc ++ - 6.dll的共享库符号时出错:
编程接收信号SIGSEGV,分段错误.
当用户点击窗口上的关闭按钮时,我需要打破一个while循环,但我不知道要检查什么.我正在使用allegro来运行GUI.
我正在使用Allegro创建一个简单的游戏.当我尝试验证我的显示指针不是null时,我收到编译器错误告诉我
错误C2664:'void validate(bool,std :: string)':无法将参数1从'std :: unique_ptr <ALLEGRO_DISPLAY,main :: <lambda_996846ce92067e506da99cad36e610cf >>转换为'bool'
这是我的代码
#include <iostream>
#include <memory>
#include <string>
#include <allegro5\allegro.h>
using namespace std;
const int WIDTH = 512;
const int HEIGHT = 512;
void validate(bool ptr, string errorMessage) {
if (!ptr) {
cerr << errorMessage << endl;
exit(-1);
}
}
int main() {
auto deleter = [](ALLEGRO_DISPLAY* d) { al_destroy_display(d); };
unique_ptr<ALLEGRO_DISPLAY, decltype(deleter)> display;
validate(al_init(), "Failed to initialize Allegro");
display = unique_ptr<ALLEGRO_DISPLAY, decltype(deleter)>(al_create_display(WIDTH, HEIGHT), deleter);
validate(display, "Failed to create display"); …Run Code Online (Sandbox Code Playgroud) 无法弄清楚如何准确地说出问题,所以这是一个例子:
鉴于此功能原型:
void Foo(myClass* bar);
Run Code Online (Sandbox Code Playgroud)
我想阻止这种用法:
Foo(new myClass());
Run Code Online (Sandbox Code Playgroud)
而是需要先前创建的对象:
myClass* bar = NULL;
bar = new myClass();
Foo(bar);
Run Code Online (Sandbox Code Playgroud)
要么
myClass bar;
Foo(&bar);
Run Code Online (Sandbox Code Playgroud)
谢谢.
这是一个澄清的例子:
void Mouse::SetImage(BITMAP* image, int focusX, int focusY) {
if(_image) {
set_mouse_sprite(NULL);
set_mouse_sprite_focus(0, 0);
show_mouse(NULL);
destroy_bitmap(_image);
_image = NULL;
}
if(image) {
_image = create_bitmap(image->w, image->h);
clear_bitmap(_image);
blit(image, _image, 0, 0, 0, 0, image->w, image->h);
}
if(image == NULL) {
focusX = 0;
focusY = 0;
}
_focusX = focusX;
_focusY = …Run Code Online (Sandbox Code Playgroud) 我正在尝试用 allegro5 在 C 中播放 wav 文件,我写了下面的代码:
#include <stdio.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_audio.h>
#include <allegro5/allegro_acodec.h>
int main(int argc, char **argv){
ALLEGRO_DISPLAY *display = NULL;
if (!al_init()){
fprintf(stderr, "failed to initialize allegro!\n");
return -1;
}
if (!al_install_audio()){
fprintf(stderr, "failed to initialize audio!\n");
return -1;
}
if (!al_init_acodec_addon()){
fprintf(stderr, "failed to initialize audio codecs!\n");
return -1;
}
if (!al_reserve_samples(1)){
fprintf(stderr, "failed to reserve samples!\n");
return -1;
}
al_install_audio();
al_init_acodec_addon();
ALLEGRO_SAMPLE *sample = al_load_sample("bomb.wav"); //sample always NULL
al_reserve_samples(1);
if (!sample){
printf("Audio clip sample …Run Code Online (Sandbox Code Playgroud)