个人在游戏开发(cocos)使用的常见的设计模式(二)

284 阅读4分钟

前言

我在这之前写常见设计模式在游戏开发中的使用,本以为是不是类似的部分都需要通过设计模式去写,后来发现并不是。很多功能并非只有一种解决方式,看你个人的风格。我个人还在学习的阶段,发现有的教程的主讲的代码写作风格区别真的很大!我真感觉有的老师或者教程主讲人可能是学java转过来的,TS给了他们足够的舞台,他们写的代码和java几乎没有区别,直接改后缀.java应该是可以扔到jdk不报错的,而另一个却完全不是这样!

这时我好像就理解设计模式的作用了,他更多是一种规范,如果说通俗点,就是让你套公式,为了让更多人的代码写让**同事能看懂。**在很多的时候游戏中涉及到各个系统,多少时候我们只是一个螺丝钉,只是要用到这些系统的某些功能,这个时候就需要你能看懂,而都理解设计模式就可以更好的看懂源码。但是他真的更好维护吗?当想处理一个Bug发现代码一环套一环 一个类套一个类的时候,想找到哪个报错的原因真的难的时候,我并没有发现他哪里好维护。

一句话说个人体会:设计模式,是一种妥协,一种相互妥协。

一、工厂模式

工厂模式是一种创建对象的设计模式,它将对象的创建和使用分离,使得代码的维护和扩展更加方便。在 TypeScript(TS)游戏开发中,工厂模式有着重要的应用。

以下是一个简单的 TS 工厂模式的代码示例:

// 抽象产品类
abstract class GameItem { }

// 具体产品类,比如游戏中的武器类
class Weapon extends GameItem {
    constructor(public name: string, public damage: number) {
        super();
    }
}

// 工厂类
class GameItemFactory {
    createItem(type: string, name: string, damage?: number): GameItem {
        if (type === 'Weapon') {
            return new Weapon(name, damage!);
        }
        return null;
    }
}

工厂模式在游戏开发中的使用场景:

游戏物品创建系统

在游戏中,物品多样。以武器创建为例,用工厂模式创建物品工厂。玩家获取或购买武器时,通过该工厂创建。开发人员可在工厂统一管理创建逻辑,如确定武器属性。更新游戏调整属性计算或添加属性时,只需修改工厂类代码,提高可维护性,也便于扩展新物品类型。

游戏关卡元素生成

游戏关卡有敌人、陷阱、宝箱等元素。创建关卡元素工厂,能按关卡设计生成特定元素。比如创建相应敌人对象,包括种类、属性、行为模式。对于宝箱,可设置物品生成规则。修改关卡元素时,在工厂调整生成逻辑,保证关卡设计的灵活性和可维护性。

工厂模式就像是游戏世界中的 “神秘铸造坊”。想象一下,在精彩的游戏世界,无数元素需被创造。没有工厂模式,创建逻辑要在各模块重复编写,效率低且杂乱。若有变化,修改困难。而工厂模式像 “神秘铸造坊”,可按规则制造各种游戏对象,是构建游戏内容的利器,让游戏世界更生动。

二、装饰者模式

装饰者模式是一种结构型设计模式,它允许在运行时动态地给对象添加新的行为。

以下是一个简单的 TS 装饰者模式的代码示例:

// 抽象组件(被装饰的对象的基类)
abstract class GameComponent {
    abstract operation(): void;
}

// 具体组件(基础游戏对象)
class BasicGameObject implements GameComponent {
    operation() {
        console.log("基础游戏对象的操作");
    }
}

// 抽象装饰者类
abstract class GameDecorator implements GameComponent {
    protected component: GameComponent;

    constructor(component: GameComponent) {
        this.component = component;
    }

    abstract operation(): void;
}

// 具体装饰者类,比如添加额外功能的装饰者
class ExtraFunctionDecorator extends GameDecorator {
    operation() {
        this.component.operation();
        console.log("添加额外功能");
    }
}

角色能力增强

角色扮演游戏中,角色有基本能力。用装饰者模式可据角色升级、获装备情况,为其添加如 “暴击强化”“吸血效果” 等特殊技能,增强角色能力,且不修改原始类,保持代码稳定性和扩展性。

游戏场景美化

游戏场景有基本外观。通过装饰者模式可添加 “萤火虫特效”“迷雾效果” 等,根据剧情、时间或玩家选择动态添加,增强场景表现力,给玩家更好视觉体验。

装饰者模式就像游戏世界中的 “魔法画笔”。在已构建好的游戏世界里,若没有此模式,添加新功能或效果要大量修改代码。而它能在不破坏原有基础上,灵活添加新色彩和细节,让游戏更精彩。