Articles of inheritance

统一和并行inheritance

我有以下几点: public class Item { [SerializeField]ItemData _data; public ItemData data { get { return _data; } } } public class Weapon : Item { [SerializeField]WeaponData _data; public WeaponData data { get { return _data; } } } public class ItemData : ScriptableObject { } public class WeaponData : ItemData { } 这似乎是一个很常见的设置,数据是从逻辑类分离 – 我可以使用单个脚本对象来定义大量的项目的统计。 但是,Unity给了我这个错误信息: […]

如何保存在所有游戏邦使用的角色?

我正在使用C#和SFML。 我在理解如何在内存中保存角色时遇到问题,所以我可以在任何游戏状态下使用角色。 现在,角色是一个类,玩家在“角色创建”GameState中创建角色。 然而,实际的variables是在GamePlayState类中创建的(见下文)。 class Character : IGameObject { public Vector2f SpritePosition { get; set; } public Vector2f SpriteScale { get; set; } public string Name { get; set; } 不过,我需要所有的角色数据在任何/所有的游戏邦可以使用。 我尝试使用一个静态游戏容器(字典,它持有GameObjects-玩家的角色),但遇到了一些我无法构建的问题。 所以我尝试了一个不同的方法来处理它。 我将所有的GameStates保存在主游戏循环中的Dictionary中。 stateSystem.AddState("Gameplay", new GameplayState(stateSystem)); 我可以调用任何特定的GameState,但是它的作用就好像角色(如果在Gameplay中创建的话)不能在其他游戏状态下访问。 然而,游戏状态可以访问任何其他的游戏状态。 例如,我试图在Gameplay – GameState中创建角色 class GamePlayState : IGameObject { Character playerCharacter = new Character(); } 而在类CharacterCreationState中,我尝试访问该字符。 它说“IGameObject不包含playerCharacter的定义”。 […]

super.render()如何调用这个方法?

今天我正在试验在libgdx添加Scene2d不同屏幕,同时这样做让我很困惑,我的Starter类( MyGdxGame )的render()中的PlayScreen()在我的PlayScreen()类中调用render() 。 基本上我明白你使用super来调用方法,字段,调用超类的构造等…但是我不明白我的Main class extends Game是我的PlayScreen class的子类/派生类只是implements Screen 。 总之,我没有看到这两个类是如何相关的,所以MyGdxGame类中的super.render()可以在我的PlayScreen类中调用render() 。 我也看了API和Screen实现ScreenAdapter和Game实现ApplicationListener但我仍然没有看到如何连接。 入门级: public class MyGdxGame extends Game { Game game; @Override public void create() { game = this; setScreen(new MainMenu(game)); } @Override public void render() { super.render(); } public void dispose() { super.dispose(); } public void pause() { super.pause(); } } PlayScreen课程: […]

奇怪的inheritance层次?

在我的RPG中,所有的食物都应该是可能的武器。 例如,我希望玩家能够尝试用樱桃或西瓜杀死兔子。 问题是,最简单的方法做到这一点是有点反直觉(和丑,恕我直言): 物品<武器<食物 (超类<子类) 我写了一个接口(IWeapon),让武器和食物实现了它,但是重复代码的数量是非常大的(这意味着它们应该共享一个共同的类,对不对?)。 例如,我不认为我想要药水可以用作武器(我不想让玩家用充满药水的小瓶撞击目标)。 我应该如何解决我目前的问题? 我应该使用inheritance还是程序到界面? 什么是可扩展性? 让所有物品都具有伤害,hitRate,完整性等属性是否有意义?

有几个具有通用接口的类,但仍然能够通过该接口访问MonoBehaviour方法?

在我们的项目中,我们曾经有一个PlayerObject类,然后是从这个类派生的Unit和Building。 我们最近开始看看Bolt,它需要定义可能具有不同状态的对象来直接inheritanceBolt类。 所以Unit和Building不能从PlayerObjectinheritance。 这就产生了一些问题,我们的游戏很大一部分使用了PlayerObject而不是Unit或者Building来执行相同的操作。 把它们分开真的会让程序产生一个问题,因为你现在必须使用Unit和Building来代替PlayerObject。 我认为制作一个通用的接口IPlayerObject,并在接口中定义公共属性和方法,使得从IPlayerObject派生的Building和Unit都可以做到这一点。 我没有足够的思考,并发现如果我使用IPlayerObject,我不能再访问MonoBehaviour的方法和字段(如变换,或渲染)。 我可以这样做,我可以使用IPlayerObjecttypes,单位或建筑types,仍然可以通过该接口访问MonoBehaviour? 如果没有,是否有适当的方法来做到这一点,过去只是添加额外的方法分别处理单位和建筑types。

错误:没有默认构造函数存在“雪碧”

我想要做的是让Player类inheritanceSprite类。 所以我inheritance了这样的: class Player: public Sprite {}; 但是,当我去我的Player.cpp我得到以下错误: 错误:“Sprite”不存在默认构造函数。 但它确实有一个构造函数(嗯,其中2个): Sprite(int index, sf::Vector2f position); Sprite(int index, sf::Vector2f position, float rotation); 此外,不知道这是否是正确的地方张贴这个。 但是由于它包含了SFML库代码,所以我会在这里发布它。

C#使用接口模拟多重inheritance的优点是什么?

接口是C#的一个function,我从来没有能够看到它的目的。 我看到他们一直使用专业代码,但是对于我来说,我不能算出理由。 我的问题是关于模拟多inheritance的接口。 在阅读这个主题的时候,我会经常想出一个这样的例子: interface IAddition { int add(int a, int b); } interface ISubtraction { int sub(int a, int b); } class Calculation : IAddition, ISubtraction { public int add(int a, int b) { return result1 = a + b; } public int sub(int a, int b) { return result1 = a – b; […]

不能将types对象隐式转换为UnityEngine.GameObject

所以,我不能隐式地将types对象[]转换为UnityEngine.GameObject []。 但为什么? 据我所知,所有types都是inheritancetypes的对象。 所以,对于我的逻辑,我可以把一个GameObject数组放在一个对象数组中。 这就是为什么,这应该工作: spawnedObjects = FindObjectOfType<Tools> ().AddObjectToArray (spawnedObjects, go); // public object[] AddObjectToArray(object[] _array, object _toAdd){ if (_array.GetType() == _toAdd.GetType()) { object[] a = new object[_array.Length + 1]; a = _array; a [a.Length] = _toAdd; return a; } else { Debug.LogWarning ("The object that should be added to the array have to […]

用SFMLdevise我的伪3D游戏的问题

我正在devise游戏,所以我创建的对象(角色,敌人,Enemycast …)可以inheritance所有 对撞机 SpineDrawable // Sprite // AnimatedSprite D2D // D3D D2D和D3D都从virtual sf::Drawableinheritance。 D3D也被用来configuration附加轴的function。 在屏幕中绘制对象时,将对该对象进行缩放,并在(X,Y)中重新定位并进行一些计算。 Collider从D3Dinheritance,因为我所有的碰撞器都有3个轴,它从D3D接口创建了自己的AABB盒 – 由graphicstypesSprite // SpineDr …-实现。 我试图有两个向量来保存我所有的graphics, std::vector<D2D*>和std::vector<D3D*> ,因为D3D需要根据float z来sorting。 问题出现是因为D2D /// D3D类inheritance了virtual sf::Drawable ,而我正在使用从sf::Spriteinheritance的类sf::Sprite ,它从SFML的Sprite.hpp中inheritance了sf::Drawable作为非虚函数。 所以我有两个问题 我必须重写我的精灵函数在较低的水平,所以它可以inheritancesf :: Drawable虚拟? 我觉得我的devise很差 有哪些替代方法,而不是创建两个分离的sf :: Drawable / s列表来排列具有3轴的列表?

我如何处理这些inheritance问题? (口袋妖怪第三代)

我目前正在Python上制作一个口袋妖怪克隆。 在用一些GBA ROM编辑工具摆弄了一下之后,我发现在这些游戏中还有其他一些东西: 放置在地图上的事件,每个事件都有一个与它交互的脚本(可以通过运行它们或按下它们上的Abutton)运行。 这个例子是路标,隐藏物品,门,更重要的是… 除了脚本(说话,触发小精灵等)之外,NPC可以移动和/或环顾(至less其中的一些)。 玩家角色也可以移动和环顾四周,由玩家控制或者由一些外部事件控制。 但是玩家本身并不是一个事件,因为它本身没有相关的事件脚本。 它只是触发其他人的。 那么我应该如何去重新创建这个Python呢? 通过使用多重inheritance,我会得到这样的东西: class Event(object): def __init__(self, x, y script): self.x = x self.y = y self.script = script class Moving(object): ''' objects that can move ''' def __init__(self, x, y, direction): self.x = x self.y = y self.direction = direction def move_one_space_to(self, direction): self.x += direction.x […]