我是c ++的新手,所以如果这是一个愚蠢的问题,我很抱歉,但我似乎找不到答案。
我一直在使用Processing一段时间了,并且想开始使用c ++,因为我听说它更快,而且我制作的程序太长/太密集,以便处理以合理的速度运行。
在Processing中有一个设置void,它运行一次,然后是draw void,之后连续运行。这就是我习惯的,我需要它用c ++(国际象棋AI)重制一个程序。
有没有办法让int main连续运行?如果没有,我可以调用一个连续运行的功能吗?
还有一种方法可以在运行可以绘制几何体的程序时弹出一个窗口吗? (我需要制作可以理想地用鼠标操作的碎片)
我正在使用Xcode
答案 0 :(得分:2)
main()
通常应该进行设置,然后启动工具包提供的主要消息处理循环。消息处理循环将持续运行,直到用户请求您的应用程序退出(或者您要求工具包关闭您的应用程序)。
只要您的窗口需要绘制,您的工具包就会调用您的绘图功能。当用户输入(例如按键或鼠标点击)时,它将调用其他功能。
例如,如果您使用的是GLUT工具包(对于OpenGL,Mac,Windows,Linux和许多移动设备上支持的非常流行的绘图API),您的主要功能可能如下所示(complete tutorial here) :
void main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(500,500);
glutCreateWindow("My First openGL Program");
glutDisplayFunc(render);
glutMainLoop();
}
对于OSX本机API Cocoa,它可能看起来像这样(more information and links here):
#import <Cocoa/Cocoa.h>
int main(int argc, const char** argv)
{
return NSApplicationMain(argc, argv);
}
答案 1 :(得分:1)
我可以建议您不要在StackOverflow上提出这样的基本问题,而是花时间阅读分散在网络上的thousands介绍性C ++教程之一。
经过几个小时的阅读后,您会发现通过Google搜索可以更快地回答这样的问题。
祝你学习顺利。
答案 2 :(得分:0)
你不应该试图让main()连续运行。
你可以这样做:
int main() {
while (true) {
//call functions here
}
return 1;
}
答案 3 :(得分:0)
在C ++中,每个函数都是由它的调用定义的,并且它是返回的。例如:
void foo()
{
cout << "hello world!";
return;
}
int main()
{
foo();
return 0;
}
当foo()被调用时,它会一直运行到 return 语句。如果我们希望foo运行一段不确定的时间,我们可以,例如:
void foo() { bool isExiting = false; char input; while( isExiting != true ) { cout << "Exit? "; cin >> input; if ( input == 'y' ) { isExiting = true; } return; } } int main() { foo(); return 0; }
这是一个丑陋的例子 - 将cin用于char和诸如此类的东西 - 但它得到了这个想法。 while循环将永远运行,并且它的内部(无论如何,它是逻辑的)可以用你的程序需要做的替换。
有意义吗?
答案 4 :(得分:0)
就图形库而言,有很多选择;你可以使用SDL,GLUT / OpenGL,DirectX,甚至是好的ol&#39; Win32的。然而,对于那些相对较新的事物而言,如同循环时一样,我建议你暂时离开C ++,因为有许多特性可能被证明是巨大的障碍。如果你确实需要每一盎司的速度,我建议你使用时间关键算法制作一个DLL,并将其与支持DLL的简单语言结合使用,并提供一个相对开发人员友好的界面。 Game Maker立刻浮出水面,虽然我确信那里有很多选择。
祝你好运。
答案 5 :(得分:0)
我建议您查看Cinder或OpenFrameworks作为Processing.org的一个简洁过渡 - 特别是如果您计划进行多媒体应用程序(如果您使用的是处理,很可能)
它们都提供了与Processing非常相似的层,并且会稍微减轻你的旅程。
如果您愿意,也可以在SDL之上实现自己的基本框架。
作为对你的问题的更一般的回答,main()函数与Processing.org中的setup()函数基本相同 - 主要区别在于它必须调用(用户提供的)绘图( )功能或等同物。
所以一个基本的等价物是:
bool quit = FALSE;
void setup() {
// initialise the screen and so forth
}
void draw() {
// perform some drawing and update tasks
}
int main(int argc, char *argv[]) {
setup();
while (!quit) {
draw();
}
shutdown();
return 0;
}
NB:以上内容可能会编译,但它会什么都不做除了循环并且可能会使你的机器陷入困境,因为它没有连接到任何图形库而且没有用户输入修改quit
布尔值。
最后,我将引用Cinder faq中的一节:
我对Processing有经验,但我 我想我已经准备好尝试新的东西。 Cinder是否适合我?
很可能。 首先,确保你真的需要 继续前进到Cinder。你有没有? 尝试使用外部 IDE喜欢Eclipse吗?你使用的是原生的吗? OpenGL调用而不是PGraphics? 怎么样尝试Toxi的 优秀的图书馆你会学到一些东西 最终将成为最终的东西 过渡到Cinder更容易,而且 就像我们使用C ++一样,这很简单 低估处理的距离 可以带你所有这一切,不要让 我们也会告诉你 - 如果 你对学习Cinder感到很兴奋, 我们很高兴有你,我们打赌 你会发现它更容易上手 比你想象的还要多。