C
Bei diesem Programmcode tritt dieses Problem auf!!!!!!!
Problem: Wie ihr in diesem Video sehen werdet, wird wenn ich das Objekt bewege
das Objekt an der alten Position nicht mehr gelöscht!!!! http://www.youtube.com/watch?v=8x2KLeiRWPg
Code:
#include <windows.h>
#include <d3dx9.h>
#include <dinput.h>
HWND main_window_handle = NULL;
HINSTANCE hinstance_app = NULL;
#define WINDOW_CLASS_NAME "Game Shell Window"
#define WIN32_LEAN_AND_MEAN
#define T1 "C:\\Users\\Michael\\Pictures\\Car_1.bmp"
LPDIRECT3D9 lp3D = NULL;
LPDIRECT3DDEVICE9 lp3DDevice = NULL;
LPDIRECT3DVERTEXBUFFER9 Quad = NULL;
LPDIRECT3DTEXTURE9 lpTexture = NULL;
LPDIRECTINPUT8 lpDI = NULL;
LPDIRECTINPUTDEVICE8 lpKey = NULL;
float TransX;
float TransY;
#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
#define D3D_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_TEX1)
struct CustomVertex
{
float x,y,z;
float tu,tv;
};
CustomVertex QuadVertices[]=
{
{-1.0f,0.0f,0.0f,0.0f,1.0f},
{-1.0f,2.0f,0.0f,0.0f,0.0f},
{1.0f,0.0f,0.0f,1.0f,1.0f},
{1.0f,0.0f,0.0f,1.0f,1.0f},
{-1.0f,2.0f,0.0f,0.0f,0.0f},
{1.0f,2.0f,0.0f,1.0f,0.0f},
};
void Init_3D();
void Init_Szene();
void Render();
void Init_Projection();
void Init_Input();
void Get_Input();
LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
PAINTSTRUCT ps;
HDC hdc;
switch(msg)
{
case WM_CREATE:
{
return(0);
}
break;
case WM_PAINT:
{
hdc = BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
return(0);
}
break;
case WM_DESTROY:
{
PostQuitMessage(0);
return(0);
}
break;
default:
break;
}
return (DefWindowProc(hwnd, msg, wparam, lparam));
}
int WINAPI WinMain( HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow)
{
WNDCLASSEX winclass;
HWND hwnd;
MSG msg;
winclass.cbSize = sizeof(WNDCLASSEX);
winclass.style = CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc = WindowProc;
winclass.cbClsExtra = 0;
winclass.cbWndExtra = 0;
winclass.hInstance = hinstance;
winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
winclass.lpszMenuName = NULL;
winclass.lpszClassName = WINDOW_CLASS_NAME;
winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
hinstance_app = hinstance;
if (!RegisterClassEx(&winclass))
return(0);
if (!(hwnd = CreateWindowEx(NULL,WINDOW_CLASS_NAME,"My Game Shell",WS_POPUP | WS_VISIBLE,0,0,1680,1050,NULL,NULL,hinstance,NULL)))
return(0);
main_window_handle = hwnd;
Init_Input();
Init_3D();
Init_Projection();
Init_Szene();
while(TRUE)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
if(KEYDOWN(VK_ESCAPE))
{
SendMessage(main_window_handle,WM_CLOSE,0,0);
}
}
Render();
Get_Input();
}
return(msg.wParam);
}
void Init_3D()
{
lp3D = Direct3DCreate9(D3D_SDK_VERSION);
D3DPRESENT_PARAMETERS dpp;
ZeroMemory(&dpp,sizeof(dpp));
dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
dpp.BackBufferCount = 1;
dpp.BackBufferWidth = 1680;
dpp.BackBufferHeight = 1050;
dpp.Windowed = TRUE;
dpp.BackBufferFormat = D3DFMT_UNKNOWN;//D3DFMT_X8R8G8B8;
dpp.hDeviceWindow = main_window_handle;
lp3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,main_window_handle,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&dpp,&lp3DDevice);
}
void Init_Szene()
{
void* VBS;
lp3DDevice->CreateVertexBuffer(sizeof(QuadVertices),D3DUSAGE_WRITEONLY,D3D_CUSTOMVERTEX,D3DPOOL_MANAGED,&Quad,NULL);
Quad->Lock(0,0,&VBS,0);
memcpy(VBS,QuadVertices,sizeof(QuadVertices));
Quad->Unlock();
D3DXCreateTextureFromFile(lp3DDevice,T1,&lpTexture);
lp3DDevice->SetFVF(D3D_CUSTOMVERTEX);
}
void Render()
{
D3DXMATRIX matrix;
lp3DDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0f,0);
lp3DDevice->BeginScene();
lp3DDevice->SetStreamSource(0,Quad,0,sizeof(CustomVertex));
D3DXMatrixTranslation(&matrix,TransX,TransY,0.0f);
lp3DDevice->SetTransform(D3DTS_WORLD,&matrix);
lp3DDevice->SetTexture(0,lpTexture);
lp3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,2);
lp3DDevice->EndScene();
lp3DDevice->Present(NULL,NULL,NULL,NULL);
}
void Init_Projection()
{
D3DXMATRIX ViewMatrix;
D3DXMatrixLookAtLH(&ViewMatrix,
&D3DXVECTOR3( 0.0f, 0.0f,-10.0f ),
&D3DXVECTOR3( 0.0f, 0.0f, 0.0f ),
&D3DXVECTOR3( 0.0f, 1.0f, 0.0f ));
lp3DDevice->SetTransform(D3DTS_VIEW,&ViewMatrix);
D3DXMATRIX ProjMatrix;
D3DXMatrixPerspectiveFovLH(&ProjMatrix,
D3DX_PI/4,
1680.0f/ 1050.0f,
0.0f,
100.0f);
lp3DDevice->SetTransform(D3DTS_PROJECTION,&ProjMatrix);
lp3DDevice->SetRenderState(D3DRS_LIGHTING,false);
}
void Init_Input()
{
DirectInput8Create(hinstance_app,DIRECTINPUT_VERSION,IID_IDirectInput8,(LPVOID*)&lpDI,NULL);
lpDI->CreateDevice(GUID_SysKeyboard,&lpKey,NULL);
lpKey->SetCooperativeLevel(main_window_handle,DISCL_FOREGROUND|DISCL_NONEXCLUSIVE);
lpKey->SetDataFormat(&c_dfDIKeyboard);
lpKey->Acquire();
}
void Get_Input()
{
bool bKey[256];
if(FAILED(lpKey->GetDeviceState(sizeof(bKey),(LPVOID)&bKey)))
{
lpKey->Acquire();
}
if(bKey[DIK_RIGHT])
{
TransX = TransX + 0.3f;
}
if(bKey[DIK_LEFT])
{
TransX = TransX - 0.3f;
}
}