我有三个课程,我试图为我的游戏链接在一起。我试图让它成为如果Player1踩到特定类型的Tile然后Player1的重力变量“AccelY”将改变提供升力的效果并垂直提升玩家。初始化类创建对象Player1。 (只有一个播放器,所以这可以应用于整个类)这包括CEntity.h和CPlayer.h的头文件通过CApp.h主控制器类。 CPlayer类是CEntity的子类。 Accel Y在CEntity中公开声明为没有初始值的浮点数。当播放器在那种类型的磁贴上时,我想在CPlayer中更改它。我在Tile.h文件中放了一个if语句,但我无法使用以下代码访问和更新该值?我最初尝试使用默认的类构造函数,但尝试使用如下函数。
CTILE.CPP
#include "CTile.h"
#include "CPlayer.h"
CTile::CTile(){
TileID = 0;
TypeID = TILE_TYPE_NONE;
if(TypeID == TILE_TYPE_LIFT){
CPlayer::LiftTile(0.75f, 10.0f);
//CPlayer::AccelY = 0.75f;
//CPlayer.SpeedY = 2.0;
}
}
CPLAYER.H
public:
CPlayer();
void LiftTile(float x, float y);
CPLAYER.CPP
void CPlayer::LiftTile(float x, float y){
SpeedY = x;
AccelY = y;
}
答案 0 :(得分:0)
除非成员或成员函数在该类中声明为static,否则您需要类的对象来访问其成员或调用其成员函数。
CPlayer::LiftTile(0.75f, 10.0f);
仅在CPlayer::LiftTile()
声明为
static void CPlayer::LiftTile(float x, float y); in `CPlayer` class
其他方法是通过创建LiftTitle()
类的对象来调用CPlayer
,你必须做这样的事情:
CTile::CTile()
{
TileID = 0;
TypeID = TILE_TYPE_NONE;
if(TypeID == TILE_TYPE_LIFT)
{
CPlayer obj;
obj.LiftTile(0.75f, 10.0f);
//obj.AccelY = 0.75f; //works if AccelY is declared as public member
//obj.SpeedY = 2.0; //works if SpeedY is declared as public member
}
}
答案 1 :(得分:0)
如果要使用类访问说明符AccelY
访问CPlayer::AccelY
,则需要将变量声明为static
:
class CPlayer {
static float AccelY;
};
答案 2 :(得分:0)
如果您使用
,则有效Player1.LiftTile(0.75f, 10.0f);
因为它调用了特定播放器的功能。