int main()不断运行

时间:2011-03-28 03:54:28

标签: c++ processing

我是c ++的新手,所以如果这是一个愚蠢的问题,我很抱歉,但我似乎找不到答案。

我一直在使用Processing一段时间了,并且想开始使用c ++,因为我听说它更快,而且我制作的程序太长/太密集,以便处理以合理的速度运行。

在Processing中有一个设置void,它运行一次,然后是draw void,之后连续运行。这就是我习惯的,我需要它用c ++(国际象棋AI)重制一个程序。

有没有办法让int main连续运行?如果没有,我可以调用一个连续运行的功能吗?

还有一种方法可以在运行可以绘制几何体的程序时弹出一个窗口吗? (我需要制作可以理想地用鼠标操作的碎片)

我正在使用Xcode

6 个答案:

答案 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)

我建议您查看CinderOpenFrameworks作为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感到很兴奋,   我们很高兴有你,我们打赌   你会发现它更容易上手   比你想象的还要多。