首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开发Codeigniter游戏

开发Codeigniter游戏
EN

Stack Overflow用户
提问于 2010-12-14 08:57:12
回答 1查看 2.2K关注 0票数 6

我在PHP方面有相当多的经验(大约5年左右的一些网站制作和两个浏览器游戏的经验)。这是我第一次真正地摆弄核心引擎,而不是仅仅为Joomla这样的东西开发插件或模块。我在其他面向对象语言(如Java)方面有丰富的经验。

我的问题是,我发现我自己开发的网站很像一个普通的网站,但我希望它比这更灵活,我不确定我是不是“做对了”。在某种程度上,我觉得我正在构建半个CMS。

例如,我通过一个控制器设置了主页,该控制器控制当前正在显示的视图。主视图页如下所示:

代码语言:javascript
复制
<?php $this->load->view("headerview"); ?>
<?php $this->load->view($contentview); ?>
<?php $this->load->view("footerview"); ?>

在视图文件本身中(这样我就可以动态加载contentview,其他的就不会改变了)。这是我的第一个问题,因为我通过我的主控件文件来做所有的控制,这是正确的吗?

我的index函数将mainview设置为要加载“contentview”和“gameview”变量的视图。当“contentview”是游戏时,它有一个拆分窗格,一个显示玩家的统计数据等,另一个显示玩家当前所在的页面(商家商店、战斗中、探索世界等)。决定这里所显示内容的是“gamecontent”变量(也传递到“main”控制器中)。

代码语言:javascript
复制
<?php $this->load->view("menubar"); ?>
<?php $this->load->view($gamecontent); ?>

简而言之,所有视图处理当前都在主控制器中完成,即一个控制器。

代码语言:javascript
复制
$data['title'] = "Experimental Page";
$data['maincontent'] = "gameview";
if($page == 1) {
    $data['gamecontent'] = "townview";
} else if ($page == 2) {
    $data['gamecontent'] = "merchantview";
} else if ($page == 3) {
    $data['gamecontent'] = "explorationview";
} else if ($page == 4) {
    $data['gamecontent'] = "hospitalview";
} else if ($page == 5) {
    $data['gamecontent'] = "fightview";
} else if ($page == 6) {
    $data['gamecontent'] = "adminview";
}

$this->load->helper(array('form','url'));
$this->load->library('form_validation');
$this->load->view('mainview', $data);

我还没有开始添加战斗和购物功能,但我可以看到这个控制器变得非常大,非常快。这对我来说似乎是错误的,但不知何故,我不知道如何正确地安排核心设置。

我的目标是(希望)拆分控制器,这样每个控制器就可以处理单独的游戏功能,比如治疗、战斗、探索等等,并且像我的模型(用户、暴徒、物品等)一样被拆分。

有人能帮我弄清楚如何正确安排这个项目吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-14 09:19:41

我使用Symfony Event Dispatcher组件来做类似的事情;该组件可以在不使用Symfony Framework的情况下安装,因此您可以在CodeIgniter中使用它,但是可能已经有类似的东西可供您使用;我不知道CodeIgniter。

事件分派器是Observer Pattern的通用实现。

  • 我有一个模块列表,这些模块将自己注册为它们处理的任何操作的观察者
  • 每个请求都通过一个操作(例如,“townview”)
  • 我的控制器只是创建一个事件,无论该操作是什么名称;然后事件分派器系统找到任何声称能够处理该操作的模块,并将控制权移交给它们

这样,无论你有多少操作,主控制器都不必改变;它只是创建一个事件并通过调度程序抛出它;如果它没有得到处理,它会抛出一个巨大的错误(在DEV中)或一个好的错误(在PROD中)。

这在我们的应用程序中特别有用,在我们的应用程序中,我们有许多可选组件,可以为不同的用户/客户端打开或关闭;控制器中根本没有复杂的逻辑,如果没有为客户端启用模块,我只是不注册它们。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4434979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档