【发布时间】:2011-06-19 08:54:40
【问题描述】:
嘿,所以我正在制作一个函数来收集你想保留在屏幕上的精灵,并且
然后“检查()”它们以使它们停留在舒尔,否则使它们在屏幕边缘反弹。
我在我的类 ('Object') 中定义了一个结构,它持有对精灵的引用,以及它是否仍在屏幕之外。
(因此,reflect() 函数不是' t 在精灵真正回到屏幕内之前再次调用)
我对以下代码有三个问题:
在我的 Object 结构中保存对 sprite 的引用是否允许我在调用 reflect() 时访问原始 sprite,而不仅仅是副本?
为什么'Object'结构体用红色下划线表示
Error: implicitly generated constructor for class "OnScreenCheck::Object" cannot initialize.在构造函数中,我创建了一个 Object 实例,并将其传递给 Objects 向量。我想,因为我将它传递给向量,所以向量会复制它并保存它,但我也想知道在构造函数完成后实例是否会被销毁,搞砸了。它会起作用吗?
感谢您的帮助!这是函子:
class OnScreenCheck
{
public:
struct Object{
mySprite& Sprite;
bool OffScreen;};
void AddObject(mySprite& aSprite){
Object newObject;
newObject.Sprite= aSprite;
newObject.OffScreen= false;
Objects.push_back(newObject);
};
void Check(){
// make sure box1 stays on the screen
for(int I=0; I< Objects.size(); I++){
//sprite has gone to high or to low
bool yColl (Objects[I].Sprite.Side(mySprite::top)>=ScreenHeight
|| Objects[I].Sprite.Side(mySprite::bottom)<=0);
//sprite has gone to far left or right
bool xColl (Objects[I].Sprite.Side(mySprite::left)<=0
|| Objects[I].Sprite.Side(mySprite::right)>ScreenWidth);
if(Objects[I].OffScreen==false){
if(yColl){
Objects[I].OffScreen= true;
Objects[I].Sprite.Reflect(180);}
if(xColl){
Objects[I].OffScreen= true;
Objects[I].Sprite.Reflect(90);}
}
}
};
编辑: 另外,我对 struct Object 的意图不是拥有属于 OnScreenCheck 的公共数据类型,而是使数据类型只能由 OnScreenCheck 使用,因为它保存了这些“对象”进入向量对象。它只是为了在 OnScreenCheck 中组织数据。我怎样才能做到这一点,这样我就不必立即在 OnScreenCheck 构造函数中初始化一个对象?
【问题讨论】:
标签: c++ class constructor struct