背景画像とアニメーションしている画像の2枚を表示したいのですが、バッファロックの最後の引数のところでエラーが出ます。
どこがダメなのでしょうか?(プログラムはほとんどコピーしただけです)
//*********************************//
//* *//
//* ポリゴン処理[polygon.cpp] *//
//* *//
//*********************************//
//**********************//
//* ヘッダファイル *//
//**********************//
#include "main.h"
#include "polygon.h"
//******************//
//* マクロ定義 *//
//******************//
#define POLYGON_TEXTURENAME "data/TEXTURE/画像名
// ポリゴン表示位置X
#define POLYGON_POS_X ( 300 )
// ポリゴン表示位置Y
#define POLYGON_POS_Y ( 80 )
// ポリゴン幅
#define POLYGON_WIDTH ( 130 )
// ポリゴン高さ
#define POLYGON_HEIGHT ( 250 )
//************************//
//* プロトタイプ宣言 *//
//************************//
HRESULT MakeVertexPolygon ( LPDIRECT3DDEVICE9 pDevice ); // 頂点の作成
//**********************//
//* グローバル変数 *//
//**********************//
VERTEX_2D g_aVertex [ NUM_VERTEX ];
LPDIRECT3DTEXTURE9 g_pTexturePolygon = NULL;
LPDIRECT3DVERTEXBUFFER9 g_pVtxBufferPolygon = NULL;
float g_fOffset = 0.0f;
static int nTime = 0; // アニメーション用タイマ
float Animation [] = { 0.0f , 0.2f , 0.4f , 0.6f , 0.8f }; // アニメーションX座標用配列
float Animation2 [] = { 0.0f , 0.0f, 0.0f, 0.0f, 0.0f , 0.5f, 0.5f, 0.5f, 0.5f, 0.5f }; // アニメーションY座標用配列
//******************//
//* 初期化処理 *//
//******************//
void InitPolygon ( void )
{
LPDIRECT3DDEVICE9 pDevice = GetDevice();
MakeVertexPolygon ( pDevice );
// テクスチャの設定
D3DXCreateTextureFromFile ( pDevice , POLYGON_TEXTURENAME , &g_pTexturePolygon );
if ( FAILED ( D3DXCreateTextureFromFile ( pDevice , POLYGON_TEXTURENAME , &g_pTexturePolygon ) ) )
{
// エラーだったら
MessageBox ( NULL , "テクスチャファイル読み込み失敗" , "ERROR" , MB_OK );
}
pDevice -> SetTexture ( 0 , g_pTexturePolygon );
if ( FAILED ( pDevice -> SetTexture ( 0 , g_pTexturePolygon ) ) )
{
// エラーだったら
MessageBox ( NULL , "ポリゴンへのテクスチャ設定失敗" , "ERROR" , MB_OK );
}
}
//****************//
//* 終了処理 *//
//****************//
void UninitPolygon ( void )
{
if ( g_pTexturePolygon != NULL )
{
// テクスチャポリゴンの解放
g_pTexturePolygon -> Release ();
g_pTexturePolygon = NULL;
}
}
//****************//
//* 更新処理 *//
//****************//
void UpdatePolygon ( void )
{
VERTEX_2D* pVtx;
//バッファをロックし仮想アドレスを取得する
g_pVtxBufferPolygon -> Lock(
0 ,
0 ,
( void** )&pVtx ,
0 );
// 座標更新(アニメーション)
pVtx [ 0 ].tex = D3DXVECTOR2 ( Animation [ nTime % 5 ] , Animation2 [ nTime % 10 ] );
pVtx [ 1 ].tex = D3DXVECTOR2 ( 0.2f + Animation [ nTime % 5 ] , Animation2 [ nTime % 10 ] );
pVtx [ 2 ].tex = D3DXVECTOR2 ( Animation [ nTime % 5 ] , 0.5f + Animation2 [ nTime % 10 ] );
pVtx [ 3 ].tex = D3DXVECTOR2 ( 0.2f + Animation [ nTime % 5 ] , 0.5f + Animation2 [ nTime % 10 ] );
Sleep ( 50 ); // アニメーション速度調整
nTime++; // アニメーション用タイマ更新
g_pVtxBufferPolygon -> Unlock(); //これ以降触れてはいけない
}
//****************//
//* 描画処理 *//
//****************//
void DrawPolygon ( void )
{
LPDIRECT3DDEVICE9 pDevice = GetDevice();
// ストリームを通す
pDevice -> SetStreamSource ( 0 ,
g_pVtxBufferPolygon ,
0 ,
sizeof ( VERTEX_2D )
);
// 頂点フォーマットの設定
pDevice -> SetFVF ( FVF_VERTEX_2D );
// ポリゴン描画
pDevice -> DrawPrimitive ( D3DPT_TRIANGLESTRIP ,
0 ,
NUM_POLYGON
);
}
//********************//
//* *//
//* 頂点作成関数 *//
//* *//
//********************//
HRESULT MakeVertexPolygon ( LPDIRECT3DDEVICE9 pDevice )
{
// 頂点バッファの生成
pDevice -> CreateVertexBuffer ( sizeof ( VERTEX_2D ) * NUM_VERTEX ,
D3DUSAGE_WRITEONLY ,
FVF_VERTEX_2D ,
D3DPOOL_MANAGED ,
&g_pVtxBufferPolygon ,
NULL
);
// FAILEDマクロでエラーチェック
if ( FAILED ( pDevice -> CreateVertexBuffer ( sizeof ( VERTEX_2D ) * NUM_VERTEX , D3DUSAGE_WRITEONLY , FVF_VERTEX_2D , D3DPOOL_MANAGED , &g_pVtxBufferPolygon , NULL ) ) )
{
return E_FAIL;
}
// 構造体のポインタ宣言
VERTEX_2D* pVtx;
// バッファをロックし、仮想アドレスを取得
g_pVtxBufferPolygon -> Lock ( 0 ,
0 ,
( void** )&pVtx ,
0 );
// 頂点座標の設定(x,y,z座標)
pVtx [ 0 ].pos = D3DXVECTOR3 ( POLYGON_POS_X , POLYGON_POS_Y , 0.0f );
pVtx [ 1 ].pos = D3DXVECTOR3 ( POLYGON_POS_X + POLYGON_WIDTH , POLYGON_POS_Y , 0.0f );
pVtx [ 2 ].pos = D3DXVECTOR3 ( POLYGON_POS_X , POLYGON_POS_Y + POLYGON_HEIGHT , 0.0f );
pVtx [ 3 ].pos = D3DXVECTOR3 ( POLYGON_POS_X + POLYGON_WIDTH , POLYGON_POS_Y + POLYGON_HEIGHT , 0.0f );
pVtx [ 0 ].rhw = 1.0f;
pVtx [ 1 ].rhw = 1.0f;
pVtx [ 2 ].rhw = 1.0f;
pVtx [ 3 ].rhw = 1.0f;
// 頂点色の設定
pVtx [ 0 ].color = D3DCOLOR_RGBA ( 255 , 255 , 255 , 255 );
pVtx [ 1 ].color = D3DCOLOR_RGBA ( 255 , 255 , 255 , 255 );
pVtx [ 2 ].color = D3DCOLOR_RGBA ( 255 , 255 , 255 , 255 );
pVtx [ 3 ].color = D3DCOLOR_RGBA ( 255 , 255 , 255 , 255 );
g_pVtxBufferPolygon -> Unlock();
return S_OK;
}
/////////////// EOF ///////////////
[hr]
[code]
//********************************//
//* *//
//* 背景処理[bg.cpp] *//
//* *//
//********************************//
//**********************//
//* ヘッダファイル *//
//**********************//
#include "main.h"
#include "bg.h"
//******************//
//* マクロ定義 *//
//******************//
#define bg_TEXTURENAME "data/TEXTURE/画像名"
// 背景表示位置X
#define bg_POS_X ( 0 )
// 背景表示位置Y
#define bg_POS_Y ( 0 )
// 背景幅
#define bg_WIDTH ( 800 )
// 背景高さ
#define bg_HEIGHT ( 600 )
//************************//
//* プロトタイプ宣言 *//
//************************//
HRESULT MakeVertexbg ( LPDIRECT3DDEVICE9 pDevice ); // 頂点の作成
//**********************//
//* グローバル変数 *//
//**********************//
VERTEX_2D g_aVertex2 [ NUM_VERTEX ];
LPDIRECT3DTEXTURE9 g_pTexturebg = NULL;
LPDIRECT3DVERTEXBUFFER9 g_pVtxBufferbg = NULL;
//******************//
//* 初期化処理 *//
//******************//
void Initbg ( void )
{
LPDIRECT3DDEVICE9 pDevice = GetDevice();
MakeVertexbg ( pDevice );
// テクスチャの設定
D3DXCreateTextureFromFile ( pDevice , bg_TEXTURENAME , &g_pTexturebg );
if ( FAILED ( D3DXCreateTextureFromFile ( pDevice , bg_TEXTURENAME , &g_pTexturebg ) ) )
{
// エラーだったら
MessageBox ( NULL , "テクスチャファイル読み込み失敗" , "ERROR" , MB_OK );
}
pDevice -> SetTexture ( 0 , g_pTexturebg );
if ( FAILED ( pDevice -> SetTexture ( 0 , g_pTexturebg ) ) )
{
// エラーだったら
MessageBox ( NULL , "ポリゴンへのテクスチャ設定失敗" , "ERROR" , MB_OK );
}
}
//****************//
//* 終了処理 *//
//****************//
void Uninitbg ( void )
{
if ( g_pTexturebg != NULL )
{
// テクスチャポリゴンの解放
g_pTexturebg -> Release ();
g_pTexturebg = NULL;
}
}
//****************//
//* 更新処理 *//
//****************//
void Updatebg ( void )
{
}
//****************//
//* 描画処理 *//
//****************//
void Drawbg ( void )
{
LPDIRECT3DDEVICE9 pDevice = GetDevice();
// ストリームを通す
pDevice -> SetStreamSource ( 0 ,
g_pVtxBufferbg ,
0 ,
sizeof ( VERTEX_2D )
);
// 頂点フォーマットの設定
pDevice -> SetFVF ( FVF_VERTEX_2D );
// ポリゴン描画
pDevice -> DrawPrimitive ( D3DPT_TRIANGLESTRIP ,
0 ,
NUM_BG
);
}
//********************//
//* *//
//* 頂点作成関数 *//
//* *//
//********************//
HRESULT MakeVertexbg ( LPDIRECT3DDEVICE9 pDevice )
{
// 頂点バッファの生成
pDevice -> CreateVertexBuffer ( sizeof ( VERTEX_2D ) * NUM_VERTEX ,
D3DUSAGE_WRITEONLY ,
FVF_VERTEX_2D ,
D3DPOOL_MANAGED ,
&g_pVtxBufferbg ,
NULL
);
// FAILEDマクロでエラーチェック
if ( FAILED ( pDevice -> CreateVertexBuffer ( sizeof ( VERTEX_2D ) * NUM_VERTEX , D3DUSAGE_WRITEONLY , FVF_VERTEX_2D , D3DPOOL_MANAGED , &g_pVtxBufferbg , NULL ) ) )
{
return E_FAIL;
}
// 構造体のポインタ宣言
VERTEX_2D* pVtx;
// バッファをロックし、仮想アドレスを取得
g_pVtxBufferbg -> Lock ( 0 ,
0 ,
( void** )&pVtx ,
0 );
// 頂点座標の設定(x,y,z座標)
pVtx [ 0 ].pos = D3DXVECTOR3 ( bg_POS_X , bg_POS_Y , 0.0f );
pVtx [ 1 ].pos = D3DXVECTOR3 ( bg_POS_X + bg_WIDTH , bg_POS_Y , 0.0f );
pVtx [ 2 ].pos = D3DXVECTOR3 ( bg_POS_X , bg_POS_Y + bg_HEIGHT , 0.0f );
pVtx [ 3 ].pos = D3DXVECTOR3 ( bg_POS_X + bg_WIDTH , bg_POS_Y + bg_HEIGHT , 0.0f );
pVtx [ 0 ].rhw = 1.0f;
pVtx [ 1 ].rhw = 1.0f;
pVtx [ 2 ].rhw = 1.0f;
pVtx [ 3 ].rhw = 1.0f;
// 頂点色の設定
pVtx [ 0 ].color = D3DCOLOR_RGBA ( 255 , 255 , 255 , 255 );
pVtx [ 1 ].color = D3DCOLOR_RGBA ( 255 , 255 , 255 , 255 );
pVtx [ 2 ].color = D3DCOLOR_RGBA ( 255 , 255 , 255 , 255 );
pVtx [ 3 ].color = D3DCOLOR_RGBA ( 255 , 255 , 255 , 255 );
// テクスチャ座標の設定
pVtx [ 0 ].tex = D3DXVECTOR2 ( 0.0f , 0.0f );
pVtx [ 1 ].tex = D3DXVECTOR2 ( 1.0f , 0.0f );
pVtx [ 2 ].tex = D3DXVECTOR2 ( 0.0f , 1.0f );
pVtx [ 3 ].tex = D3DXVECTOR2 ( 1.0f , 1.0f );
g_pVtxBufferbg -> Unlock();
return S_OK;
}
/////////////// EOF ///////////////