加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d-iphone – 使用cocos2d游戏的状态设计模式

发布时间:2020-12-14 18:57:32 所属栏目:百科 来源:网络整理
导读:我正在创造的游戏是一个单词益智游戏.你从菜单开始,用户决定使用单人游戏或多人游戏. 如果他们选择单人游戏,那么他们可以选择玩3种不同的模式. 练习 没有计时器 压力 玩家必须在10秒内反复进行拼图,直到它在10秒钟内无法完成拼图并且他们“死” 时间之战 玩
我正在创造的游戏是一个单词益智游戏.你从菜单开始,用户决定使用单人游戏或多人游戏.
如果他们选择单人游戏,那么他们可以选择玩3种不同的模式.

>练习

没有计时器

>压力

玩家必须在10秒内反复进行拼图,直到它在10秒钟内无法完成拼图并且他们“死”

>时间之战

玩家有2分钟可以做尽可能多的谜题.

你知道,实际的游戏玩法并没有改变,但唯一改变的是如何管理时间.
我读了你的文章,我发现State模式非常适合,现在我唯一的问题就是如何实现这种模式.

我应该在菜单状态抽象和游戏抽象中创建子状态,还是应该创建一个通用游戏状态抽象,然后忽略“handleMenuSelection”之类的调用?

我在cocos2d上找不到任何在线报道的好教程.我可以找到很多小型演示,但是除了OOP设计之外,我从未触及过设计模式,因此很难将其转换为大型应用程序.

顺便说一句.你的链接非常有帮助,为新想法开启了我的思想:)

解决方法

拥有一个维护所有统计数据的单例类(共享对象)很好.

示例:说MyGame用于存储所有游戏统计信息.
//在MyGame.h中

typedef enum
{
    kGameMode_Practice = 1001,kGameMode_Stress,kGameMode_TimeBattle,}GameMode;



@interface MyGame: NSObject
{
    GameMode  mGameMode;
    int       mHighScore;
} 
@property(nonatomic,assign) GameMode  gameMode;

@property(nonatomic,assign)int highScore;

+(MyGame*)sharedGameObject;

//在MyGame.mm中

static MyGame *gGame = nil;

  @implementation MyGame
  @synthesize gameMode=mGameMode;
  @synthesize highScore=mHighScore;

 +(MyGame*)sharedGameObject
 {
    if(!gGame)
    {
        gGame = [[MyGame alloc] init];
    }
    return gGame;
 }

 -(void)saveData //Call this from applicationWillResignActive
 {
         NSUserDefaults *userDafs = [NSUserDefaults standardUserDefaults];
         [userDafs setInteger:self.highScore forKey:@"highScore"];
         [userDafs setInteger:self.gameMode forKey:@"gameMode"];

         [[NSUserDefaults standardUserDefaults] synchronize];
 }

 -(void)loadData //call this from UIApplication didFinishLaunchingWithOptions 
 { 
     NSUserDefaults *userDafs = [NSUserDefaults standardUserDefaults];
     self.highScore = [userDafs integerForKey:@"highScore"]
     self.gameMode = (GameMode)[userDafs integerForKey:@"gameMode"]

 }

//您可以在选择菜单按钮时设置游戏模式

[MyGame sharedGameObject].gameMode = kGameMode_Practice

//检查游戏中的任何地方

if([MyGame sharedGameObject].gameMode == kGameMode_Practice)

同时在应用终止时保存这些值,并在应用启动时加载相同值.

[[MyGame sharedGameObject] saveData];

根据游戏模式,您可以更改游戏.使用单一通用类进行游戏玩法逻辑并检查游戏模式并进行调整..当你为3个类设计3个单独的类时,将来需要在所有文件中更新一个更好的…所以尽可能多地使用通用代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读