新微赢技术网

标题: C++中类的使用,为什么实例化无效呢? [打印本页]

作者: ︶ㄣlоve_    时间: 2009-11-6 02:04
标题: C++中类的使用,为什么实例化无效呢?
C++中类的使用,为什么实例化无效呢?
我本来是实例化为2个对象,每个对象都有读各自的图片
为什么第一个实例会变为第二个实例的图片呢(图片总是最后读入的一张)???
出错在这里
testBaseObject->Render();
testBaseObject2->Render();
显示出来的图片2张是一模一样的
我本来是实例化为2个对象,每个对象都有读各自的图片才对啊
为什么会第一个实例会变为第二个实例的图片呢???
///////////////头文件BaseObject.h///////////////
#if !defined(Drirectx_9_D3D_BaseObject_Creact)
#define Drirectx_9_D3D_BaseObject_Creact
#include <d3dx9.h>
#include <string>
using namespace std;
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class BaseObject
{
public:
// 全局变量:
bool Enabled;
bool visible;
BaseObject();
BaseObject(LPDIRECT3DDEVICE9 xdevice);
~BaseObject();
bool init(LPDIRECT3DDEVICE9 xdevice);
bool LoadImageFile(std::string filename); //读入图片
void Render(); //渲染图片
.....
};
#endif //!defined(Drirectx_9_D3D_BaseObject_Creact)
//////////结束BaseObject.h////////
/////BaseObject.cpp中的代码//////
#include "stdafx.h"
#include "BaseObject.h"
float width; //图象的宽
float height; //图象的高
D3DXVECTOR3 position; //图象坐标系数
D3DXVECTOR3 scale; //图象变形系数
int alpha; //图象透明值
//int AlphaColorKey; //透明值关键色
int MoveSpeed; //移动速度
int MoveStep; //移动步长
int ImageChangSpeed; //图片变化速度
float ImageCutWidth; //图片切割的宽
float ImageCutHeight; //图片切割的高
int ImageCutWidthNum; //图片切割宽的份数
int ImageCutHeightNum; //图片切割高的份数
LPD3DXSPRITE sprite = NULL; //定义3DXSPRITE精灵
LPDIRECT3DTEXTURE9 Texture = NULL; //定义纹理
D3DXMATRIX scaleMatrix;
D3DXMATRIX transMatrix;
LPDIRECT3DDEVICE9 device;
bool BaseObject::init(LPDIRECT3DDEVICE9 xdevice)
{
device=xdevice;
D3DXCreateSprite(device, &sprite); //调用函数生成一个2D精灵
position.x = 0.0f;
position.y = 0.0f;
position.z = 0.0f;
scale.x = 1.0f;
scale.y = 1.0f;
scale.z = 1.0f;
alpha=255;
ImageCutWidthNum=1;
ImageCutHeightNum=1;
return true;
}
BaseObject::BaseObject()
{
}
BaseObject::~BaseObject()
{
if( sprite != NULL )
sprite->Release();
if( Texture != NULL )
Texture->Release();
}
bool BaseObject::LoadImageFile(std::string filename)
{
D3DXIMAGE_INFO imageInfo; //记录载入图片的信息
HRESULT hr = D3DXCreateTextureFromFileEx(device, //D3D设备对象
filename.c_str(), // 载入图片的地址
D3DX_DEFAULT, // 图片的宽,
D3DX_DEFAULT, // 图片的高
D3DX_DEFAULT, // 图片的miplevels
0,
D3DFMT_UNKNOWN,
D3DPOOL_DEFAULT,
D3DX_FILTER_NONE,
D3DX_FILTER_NONE,
0xFFFFFFFF, // 关键颜色值(黑色), 将载入的图片里面的关键颜色值设置为透明色
&imageInfo, //记录载入图片的信息
NULL, //记录载入调色板的信息
&Texture); // 用来储存载入图片的纹理对象实例
if( FAILED(hr))
{
return false;
}
height = (float)imageInfo.Height;
width = (float)imageInfo.Width;
setMatrix();
return true;
}
void BaseObject::Render()
{
// 设置图片大小位置的转换
sprite->SetTransform(&transMatrix);
D3DXVECTOR3 vPositions(position.x, position.y, 0.0f );
sprite->Begin(D3DXSPRITE_ALPHABLEND); ////准备一个设备以用来渲染图片
sprite->Draw(Texture, // 一个精灵纹理的实例
NULL, // 渲染的图片部分所在的矩形区域, NULL表示我们将要渲染整副图片
NULL, //指定精灵的位置, NULL表示点(0,0,0)为精灵的中心
NULL, //指定精灵的位置, NULL表示精灵的位置是点(0,0,0)
D3DCOLOR_RGBA(255,255,255,alpha)); //图片的颜色和alpha值被此值修正
sprite->End(); ////通知精灵设备我们的图片渲染完成了,
}
//////////结束BaseObject.cpp///////////////////////////////////////
////////////////////////////////
/////头文件GameMain.h////
#if !defined(Game_Main_Drirectx_9_D3D_Play_100_1)
#define Game_Main_Drirectx_9_D3D_Play_100_1
#pragma once
#include "BaseObject.h"
#endif //!defined(Game_Main_Drirectx_9_D3D_Play_100_1)
///////结束GameMain.h/////////
////////////////////////////////
////文件GameMain.cpp///////
....
...
BaseObject *testBaseObject;
BaseObject *testBaseObject2;
....
..
testBaseObject = new BaseObject();
testBaseObject2 = new BaseObject();
testBaseObject->init(g_pD3DDevice);
testBaseObject2->init(g_pD3DDevice);
testBaseObject->LoadImageFile("DemekinLeft.png");
testBaseObject2->LoadImageFile("PingPongLeft.png");
出错在这里
testBaseObject->Render();
testBaseObject2->Render();
显示出来的图片2张是一模一样的
我本来是实例化为2个对象,每个对象都有读各自的图片才对啊
为什么会第一个实例会变为第二个实例的图片呢???
作者: 寂寞    时间: 2009-11-6 02:04
问题解结了....




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2