我正在尝试用C#制作游戏。 首先看一下我目前的一些代码:
我的抽象类gridobject
它包含我的gridobjects(墙,玩家,敌人等)的所有常规属性
abstract class GridObject
{
public Rectangle Rect;
...
//all kind of getters and setters for location and size: X, Y, Height, Width
...
}
界面移动
此界面包含移动的gridobject的属性:
interface Moving
{
int Xspeed { get; set; }
int Yspeed { get; set; }
void Move();
}
现在我想为我的游戏添加引力:
public void doGravity(GridObject obj)
{
//check if intersects && if object isn't the same as the given object.
while (AllGridObjects.FindAll(item => item.Rect.IntersectsWith(obj.Rect) && item != obj).Count > 0)
{
obj.Y += obj.Yspeed;
obj.Yspeed++;
}
}
这给出了编译错误。因为Yspeed不是抽象类GridObject中的必填字段。 也许标题不正确,也许也是我的问题,但是如何将对象转换为抽象类和接口以确保属性Y和属性Yspeed是必需的? 这样做的正确方法是什么?
答案 0 :(得分:1)
在设置值之前将其转换/转换为您需要的类型。
if(obj is Moving)
{
var objectAsMoving = obj as Moving; //or (Moving)obj;
objectAsMoving.Y += objectAsMoving.Yspeed;
objectAsMoving.Yspeed++;
}
答案 1 :(得分:0)
感谢DLeh,我找到了解决方案。
我正在使用一个继承自MovingGridObject
和GridObject
的额外抽象类Moving
。
这是我将在doGravity
方法中使用的类型。