- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个使用 UIKit 菜单的 cocos2d 驱动的游戏,所以我只使用一个 viewcontroller 的框架,也就是游戏本身。而且,它只有一个场景。由于 cocos2d 2.0 director 本身是一个 UIViewController
子类,所以我只是在用户点击开始按钮时将它推送到我的 MenuViewController
中:
-(void)startGameButtonPressed {
CCDirectorIOS* director = (CCDirectorIOS *) [CCDirector sharedDirector];
// Create an CCGLView with a RGB565 color buffer, and a depth buffer of 0-bits
self.glView = [CCGLView viewWithFrame:CGRectMake(0, 0, 480, 320)
pixelFormat:kEAGLColorFormatRGB565 //kEAGLColorFormatRGBA8
depthFormat:0 //GL_DEPTH_COMPONENT24_OES
preserveBackbuffer:NO
sharegroup:nil
multiSampling:NO
numberOfSamples:0];
// attach the openglView to the director
[director setView:glView];
[director runWithScene:[GameLayer scene]];
[director setDelegate:(id <CCDirectorDelegate>) [[UIApplication sharedApplication] delegate]];
[self.navigationController pushViewController:director animated:YES];
}
当用户开始第一个游戏时,第一次调用该方法时效果很好。游戏结束后,我调用 [[CCDirector sharedDirector] end]
。
大部分的 director 设置都是在 appDelegate 中完成的(它与默认的 Cocos2d 模板保持不变)。我只将 CCGLView
作为保留属性放入我的 MenuViewController
,否则当调用 [[CCDirector sharedDirector] end]
时应用程序会崩溃CCGLView
未保留。我认为这可能是一个 cocos2d 错误。在 [[CCDirector sharedDirector] end]
中,框架调用了 [self setView:nil]
,但它稍后仍会尝试访问 View (可能在另一个线程上)。
现在的问题是,在第二次调用我的上述方法时(当用户想要从菜单开始另一个游戏时)startGameButtonPressed
, Controller 被按下但屏幕仍然是黑色的。游戏正在运行并有响应,但我什么也没看到。有人可以帮我解决这个问题吗?
最佳答案
好的,我遇到了同样的问题,我能够“修复它”。
当您设置 CCGLView 和 [director setView:] 时,即使弹出 Controller ,场景仍然存在。唯一发生的事情是场景停止。
所以为了让“重启”工作,你必须检查是否已经有一个正在运行的场景(即使它已经停止,而不是 runWithScene:
你使用 replaceScene:
。
这是我的代码,您可以看到:
- (void)setupCocos2D {
CCGLView *glView = [CCGLView viewWithFrame:CGRectMake(0, 0, 320, 480)
pixelFormat:kEAGLColorFormatRGB565 //kEAGLColorFormatRGBA8
depthFormat:0 //GL_DEPTH_COMPONENT24_OES
preserveBackbuffer:NO
sharegroup:nil
multiSampling:NO
numberOfSamples:0];
// HERE YOU CHECK TO SEE IF THERE IS A SCENE RUNNING IN THE DIRECTOR ALREADY
if(![director_ runningScene]){
[director_ setView:glView]; // SET THE DIRECTOR VIEW
if( ! [director_ enableRetinaDisplay:YES] ) // ENABLE RETINA
CCLOG(@"Retina Display Not supported");
[director_ runWithScene:[HelloWorldLayer scene]]; // RUN THE SCENE
} else {
// THERE IS A SCENE, START SINCE IT WAS STOPPED AND REPLACE TO RESTART
[director_ startAnimation];
[director_ replaceScene:[HelloWorldLayer scene]];
}
[director_ setDelegate:(id <CCDirectorDelegate>) [[UIApplication sharedApplication] delegate]];
// I DO NOT PUSH BECAUSE I ALREADY PUSHED TO THIS CONTROLLER, SO I ADD THE COCOS2D VIEW AS A SUBVIEW
[self.view addSubview:[director_ view]];
}
希望这段代码能帮到你,因为我花了一整天的时间试图弄明白这个问题。这可能不是正确的方式,甚至不是最漂亮的方式,但它确实有效:)
编辑:另外,请注意,如果您 POP COCOS2D 场景,则不必 [[CCDirector sharedDirector] end]
,因为当 View 被释放/删除时动画将停止。
关于ios - cocos2d 2.0-rc2 : end the director and restart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11037134/
我的 Windows 使用 Ubuntu 设置了 WSL。它已经工作了一段时间,直到我升级到 WSL2。 问题是:每次我启动我的电脑(或重新启动我的电脑)时,它都会失去从 Ubuntu 到 Windo
我正在使用 docker 版本 1.1.0,由 systemd 使用命令行启动 /usr/bin/docker -d ,并试图: 运行容器 停止 docker 服务 重新启动 docker 服务(使用
鉴于以下(为了论证而简化)docker-compose.yml文件: version: '3' services: postgres: image: fleetit-postgres
我使用 Vertx SockJs 构建了一个 Eventbus 桥。 这是我的verticle的代码: @Override public void start() throws Exception {
使用docker stack deploy,我可以看到如下信息: Ignoring unsupported options: restart 是否意味着重启政策没有到位? 是否必须在撰写文件之外指定它
我们的 Varnish 实例 /usr/sbin/varnishd -P /var/run/varnish.pid -a :6081 -f /etc/varnish/cm-varnish.vcl -
Varnish 是否保留崩溃/重启日志? 我目前正在监控一个 varnish 服务器,它似乎每周都会重新启动,当 CPU 使用率达到大约 100%(负载有点高 - 在 2 核机器上大约 6~7)并且
我有一个 Android 应用程序,在您第一次运行时运行良好。但是,当您按 HOME(因此暂停)并从主屏幕重新启动它时,我得到的只是音乐重新启动。 我还没有进入保存/恢复状态的阶段(很快就会完成!)。
我的应用程序有一个服务,每 X 分钟对数据库执行与 stopSelf() 相同的操作,并进入 onDestroy 方法我已经放置了这段代码以便在同一时间后重新启动服务: @Override publi
复制代码 代码如下: '******************************************************************** '* '* 
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我检查了我在 ECS 集群中运行的一个 docker 容器,它的重启策略为空白(“{{ .HostConfig.RestartPolicy.Name }}”)。我不确定 ECS 在发生故障时会做什么,
我用 Google Cloud Shell运行 Jupyter Notebook在实例上,但在 1 hours 之后,连接断开。 我重新连接到实例,什么都没有,与重置实例相同。 So, please
Java中是否有任何命令或程序可以重新启动我的应用程序本身? 我开发了一个 Java 桌面应用程序,但过了一段时间它就会挂起。我不知道为什么,所以我想重新启动我的应用程序本身。是否可以? 最佳答案 你
我已经创建了一个容器,却忘记了在创建容器时设置--restart ='always'。 是否可以为已经创建的容器修改此选项?我知道我可以创建一个新的,但这很有用,因为它发生在我身上好几次了... 最佳
是否可以使用 pm2 重新启动特定组的应用程序?像 pm2 restart service-* 重新启动 service-a 和 service-b 之类的东西?我发现 pm2 restart ser
我是一个刚开始使用C++编写代码已经有几个星期了。我已经编写了一个程序来拥有一个菜单,用户可以从中选择执行不同任务的选项。我有两个问题:首先,我该如何做,以便在执行任务后将用户发送回菜单;其次,当用户
所以我有一个应用程序,用户通过 3 个 View Controller 然后向 Facebook 提交图片。在他们将其提交到 Facebook 后,我希望他们能够选择重新启动该过程,就好像他们重新启动
我正在尝试构建一个 hadoop Dockerfile。 在构建过程中,我添加了: && apt install -y openssh-client \ && apt install -y o
当您运行docker run时,可以选择添加--rm和--restart。但是,如何在dockerfile中获得相同的效果? 最佳答案 Dockerfile用于指定构建镜像的指令。 生成镜像后,可以使
我是一名优秀的程序员,十分优秀!