首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GameObjects与代码结构

GameObjects与代码结构
EN

Stack Overflow用户
提问于 2017-05-05 13:50:22
回答 1查看 93关注 0票数 0

我有下面的GameObject interface

代码语言:javascript
复制
public interface GameObject {
     void viewDetails();    
}

字符Interface

代码语言:javascript
复制
interface Character{   
    void pickUp(Weapon weapon);
    void use(Weapon weapon);
}

abstract武器class

代码语言:javascript
复制
public abstract class Weapon implements GameObject {

  //left out constructor to focus on methods

   @Override
   public abstract void viewDetails();
   public abstract void attack(Enemy enemyObj);
   //Could be bullets, could be a mystical item.
   public abstract void replenish(ReplenishItem rpItem);
}

问题是,a GameObject有时可以以不同的方式使用。例如,游戏武器的主要用途是攻击目标,但如果我想重新加载怎么办?我如何让我的字符界面重新加载或注意重新加载是一种选择?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-05 21:23:44

我将使用以下方法。

我要声明接口:

代码语言:javascript
复制
interface MeleeWeapon {
    void hit();
    void cut();
}

interface FirearmWeapon {
   void fire();
   void reload();
}

interface MagicWeapon {
   void throw();
   void apply();
   void recharge();
}

然后实现类,如下所示:

代码语言:javascript
复制
class Knife implements MeleeWeapon {
     public void hit() {

     } 

     public void cut() {

     } 
}

class Dagger implements MeleeWeapon {
     public void hit() {

     } 

     public void cut() {

     }     
}

class GarandRifle implements FirearmWeapon {
     public void fire() {

     } 

     public void reload() {

     }     
}

class Fireball implements MagicWeapon {
     public void throw() {

     } 

     public void apply() {

     }     

     public void recharge() {

     }     
}

然后,我将声明这些接口:

代码语言:javascript
复制
interface MeleeWeaponUser {
    void use(MeleeWeapon weapon);
}

interface  FirearmWeaponUser {
    void use(FirearmWeapon weapon);
}

interface MagicWeaponUser {
    void use(MagicWeapon weapon);
}

而且,我要宣布字符类:

代码语言:javascript
复制
class Peasant implements MeleeWeaponUser {
    public void use(MeleeWeapon weapon) {

    }
}

class Marine implements MeleeWeaponUser, FirearmWeaponUser {
    public void use(FirearmWeapon weapon) {

    }

    public  void use(MeleeWeapon weapon) {

    }
}

class Sorcerer implements MeleeWeaponUser, MagicWeaponUser {
    public  void use(MeleeWeapon weapon) {

    }

    public  void use(MagicWeapon weapon) {

    }
}

这一办法让我们在以后不作充分努力的情况下增加新的武器和特征。

在您的use()方法中,如果武器分发器中没有更多的弹药,您可以调用reload()

但是如果你的游戏角色收到了来自外部的信号,例如,重新装上子弹,即使有足够的弹药可以发射,那么Event->Listener方法也可以实现。

创建一个WeaponEvent类,扩展这个类,使其具有FirearmWeaponEventMeleeWeaponEvent等。

使您的游戏字符类(Es) events,然后在您的游戏字符类有一个方法processEvent(WeaponEvent event),并采取相应的事件,您已经收到。

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

https://stackoverflow.com/questions/43806746

复制
相关文章

相似问题

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