2013-04-22 108 views
0

最近引起了我的注意,在游戏更新循环中,函数在另一个更新循环之前不会完全运行。例如:更新循环说明

void update() 
{ 
function 1; 
function 2; 
} 

在函数1或函数2完全运行之前会调用另一个更新循环。 是这样吗?因为我一直认为它在功能运行结束之前不会再循环。 由于我从来没有教过这个,直到最近从来没有看过这个,我从来没有编写这个想法。 我觉得这很奇怪,因为现在看来,如果我想要一段代码在每一帧上运行,我必须将代码从字面上放到更新循环中。 e.g

void update() 
{ 
int i = 0; 
int j - 0; 
etc //the contents of function a 
} 

我这个问题是,这肯定将停止多态性和封装?在我将创建一个函数而不是重复一段代码的方式。

我是否正确,如果有的话,为什么?

+0

不太清楚你正在谈论什么编程语言,但通常你会有一个void frame(){do this}函数完成每次调用。这不是你所听到的。 – 2013-04-22 12:57:17

+0

上面讲的代码是C#XNA游戏工作室,但是问题出现在UnityScript上并且有关于GUI的功能 – SD1990 2013-04-22 15:51:34

回答

1

正如评论,我不确定你正在使用的编程语言。

  1. 但是,你正在处理的re-entrant/non-re-entrant的情况。当发出信号时,电流将被“保持”,并且信号的动作将被调用(将其作为中断读取)。如果信号的作用是调用相同的函数(在你的情况下更新函数),那么你可以在同一个线程中保持并再次调用。

  2. 如果你的系统是多线程的话,还有一种可能性。那么你当前的线程执行路径可以被保持,任何其他的线程执行都可以被调用。这反过来可以再次调用更新函数。

这两个都是非常有名的基础计算机科学概念,被称为函数的重入和线程安全性。这个book (APIU)个人是一本了不起的书 - 尝试获得它的副本。