我使用three.js所用WebGL的渲染,使游戏的时全屏播放play
被点击的链接。 对于动画,我使用requestAnimationFrame
。
我开始这样的:
self.animate = function()
{
self.camera.lookAt(self.scene.position);
self.renderer.render(self.scene, self.camera);
if (self.willAnimate)
window.requestAnimationFrame(self.animate, self.renderer.domElement);
}
self.startAnimating = function()
{
self.willAnimate = true;
self.animate();
}
self.stopAnimating = function()
{
self.willAnimate = false;
}
当我想,我称之为startAnimating
方法,是的,因为预期它的工作。 但是,当我打电话的stopAnimating
功能,打破东西! 有没有报告的错误,但...
设置基本上是这样的:
- 有一个
play
网页上的连结 - 一旦用户点击该链接,渲染器的
domElement
应全屏,并且它 - 该
startAnimating
方法被调用,渲染器渲染开始东东 - 一旦逃避被点击时,我注册一个
fullscreenchange
事件并执行stopAnimating
方法 - 页面试图退出全屏模式,确实如此,但整个文件是完全空白
我敢肯定,我的其他代码是OK,那我莫名其妙地停止requestAnimationFrame
以错误的方式。 我的解释可能吸走,所以我上传的代码到我的网站,你可以看到它发生在这里: http://banehq.com/Placeholdername/main.html 。
下面是版本,我不尝试调用动画的方法,并fullscreening进出作品: http://banehq.com/Correct/Placeholdername/main.html 。
一旦play
点击还是第一次,游戏初始化,它的start
方法被执行。 一旦退出全屏模式,游戏的stop
正在执行的方法。 每隔一个时间play
已被点击,游戏只执行它的start
方法,因为没有必要为它重新初始化。
下面是它的外观:
var playLinkHasBeenClicked = function()
{
if (!started)
{
started = true;
game = new Game(container); //"container" is an empty div
}
game.start();
}
而这里的如何start
和stop
方法如下所示:
self.start = function()
{
self.container.appendChild(game.renderer.domElement); //Add the renderer's domElement to an empty div
THREEx.FullScreen.request(self.container); //Request fullscreen on the div
self.renderer.setSize(screen.width, screen.height); //Adjust screensize
self.startAnimating();
}
self.stop = function()
{
self.container.removeChild(game.renderer.domElement); //Remove the renderer from the div
self.renderer.setSize(0, 0); //I guess this isn't needed, but welp
self.stopAnimating();
}
这和工作版本之间的唯一区别是, startAnimating
和stopAnimating
方法调用 start
和stop
方法被注释掉。