 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Mr.Matze Mini JLI'ler

Alter: 32 Anmeldedatum: 05.07.2006 Beiträge: 27 Wohnort: Neustadt a. d. Weinstraße Medaillen: Keine
|
Verfasst am: 05.07.2006, 19:00 Titel: Newbe Problem |
|
|
Hallo,
ich bin neu hier und habe ein Problem
Ich habe Versucht das Buchbeispiel:
SpriteBounce etwas zu verändern und einen Pong Clon draus zu machen.
Ich kann schon programmieren(HTML PHP und Basic).
Ich werde aus der Fehlermeldung nicht schlau und da hoffe ich ihr könnt mir helfen.
Fehlermeldung
Zitat: |
Linker-Vorgang läuft...
DIRECT3D.OBJ : error LNK2001: Nichtaufgeloestes externes Symbol _DXTraceA@20
DIRECT3D.OBJ : error LNK2001: Nichtaufgeloestes externes Symbol _DXGetErrorDescription9A@4
Ping_Pong.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.
Ping_Pong.exe - 3 Fehler, 0 Warnung(en)
|
Ich Poste ma den ganzen Code:
Main.CPP
Code: |
/*
Jetzt lerne ich Spieleprogrammierung mit DirectX und Visual C++
Programmname: SpriteBounce
Beschreibung: Dieses Programm zeigt, wie der Resourcen Manager eingesetzt wird.
Führen Sie das Programm durch Drücken von F5 aus.
*/
// Headerdateien
#include "Direct3D.h"
#include "Sprite.h"
#include "ResourceManager.h"
// Anwendungsfenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance);
// Callback Funktion zur Nachrichtenbehandlung
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
// Das Fensterhandle
HWND hWnd = 0;
// Instanz der Klasse CDirect3D
CDirect3D Direct3D;
// Instanz der Klasse ResourceManager
CResourceManager ResourceManager;
// Asteroiden anlegen (Instanzem der Klasse CSprite)
CSprite s_oben;
CSprite s_unten;
// Windows main-Funktion
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MessageBox(0,"Das soll ein Ping Pong sein","Ping-Pong",MB_OK);
// Fenster erzeugen und Handle speichern
hWnd = CreateMainWindow(hInstance);
// Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
if(0 == hWnd)
{
MessageBox(0,"Fenster konnte nicht erzeugt werden","Fehler",MB_OK);
return -1;
}
// Direct3D initialisieren
if(!Direct3D.Init(hWnd,FALSE))
{
return -1;
}
ResourceManager.Init(Direct3D.GetDevice());
// Maus-Cursor verstecken
ShowCursor(FALSE);
// Farbe die beim Löschen verwendet werden soll
Direct3D.SetClearColor(D3DCOLOR_XRGB(0,255,0));
//Schläger initialisieren
s_unten.Create(Direct3D.GetDevice(),3);
s_unten.SetStep(3,0);
s_unten.SetPosition(SCR_WIDTH / 2, SCR_HEIGHT - 50);
s_oben.Create(Direct3D.GetDevice(),3);
s_oben.SetStep(3,0);
s_oben.SetPosition(SCR_WIDTH / 2, 50);
// Asteroiden Texturen laden
ResourceManager.AddTexture("Gfx/schlaeger.bmp");
s_unten.AddTexture(ResourceManager.GetTexture("Gfx/schlaeger.bmp"));
s_oben.AddTexture(ResourceManager.GetTexture("Gfx/schlaeger.bmp"));
// Struktur, in der Informationen zur Nachricht gespeichert werden
MSG msg = { 0 };
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Direct3D.BeginScene();
// Asteroiden mit Bounce bewegen und zeichnen
s_unten.Draw();
s_oben.Draw();
Direct3D.EndScene();
}
}
// Rückgabewert an Windows
return 0;
}
// Fenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance)
{
WNDCLASSEX wndClass =
{
sizeof(WNDCLASSEX), // Größe angeben
CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW, // Standardstile
MessageHandler, // Callback-Funktion
0, // Zusätzliche Angaben
0, // nicht benötigt
hInstance, // Anwendungsinstanz
LoadIcon(NULL, IDI_WINLOGO), // Windows-Logo
LoadCursor(NULL, IDC_ARROW), // Normaler Cursor
(HBRUSH)GetStockObject(WHITE_BRUSH), // Weißer Pinsel
NULL, // kein Menü
"WindowClass", // Der Name der Klasse
LoadIcon(NULL, IDI_WINLOGO) // Windows Logo
};
// Klasse registrieren
RegisterClassEx(&wndClass);
return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen
"WindowClass", // Klassenname
"SpriteBounce", // Fenstertitel
WS_OVERLAPPEDWINDOW | // Fenster
WS_VISIBLE, // Eigenschaften
0, 0, // Anfangsposition
SCR_WIDTH, SCR_HEIGHT, // und Größe des Fensters
NULL, // Handle des Elternfensters
NULL, // Handle des Menüs
hInstance, // Anwendungsinstanz
NULL); // wird nicht benötigt
}
// Diese Funktion wird von Windows aufgrufen, wenn
// eine Nachricht für Ihr Programm vorliegt
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// testen, um welche Nachricht es sich handelt
switch(msg)
{
// Programm beenden, wenn das Fenster
// geschlossen wird
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
case WM_KEYDOWN:
switch(wParam)
{
// Bei F1 einen Screenshot speichern
case VK_F1:
Direct3D.CreateScreenshot("c:\\screenshot.bmp");
break;
// Wenn ESC gedrückt, Programm beenden
case VK_ESCAPE:
DestroyWindow(hWnd);
break;
}
break;
}
// Standardnachrichtenverarbeitung von Windows
return DefWindowProc(hwnd, msg, wParam, lParam);
}
|
Sprite.CPP
Code: |
#include "SPRITE.H"
// Konstruktor - Initialisierungen
CSprite::CSprite(void)
{
m_Rotation = 0;
m_StepX = 0;
m_StepY = 0;
m_Width = 0;
m_Height = 0;
m_AnimationSpeed = 0;
m_AnimationDelay = 0;
m_CurrentImage = 0;
m_lpDevice = NULL;
m_lpSprite = NULL;
}
// Destructor - freigeben der Objekte
CSprite::~CSprite(void)
{
if(NULL != m_lpSprite)
{
m_lpSprite->Release();
m_lpSprite = NULL;
}
// die Texturen dürfen hier nicht mehr frei gegeben
// werden, da dies im ResourcenManager erfolgt
}
// Position setzen
void CSprite::SetPosition(float x,float y)
{
m_vPosition.x = x;
m_vPosition.y = y;
}
// Rotation setzen
void CSprite::SetRotation(float rotation)
{
m_Rotation = rotation;
}
// Skalierungsfaktor setzen
void CSprite::SetScale(float scale)
{
m_vScale.x = scale;
m_vScale.y = scale;
}
// Schrittweite bestimmen
void CSprite::SetStep(float StepX,float StepY)
{
m_StepX = StepX;
m_StepY = StepY;
}
// Sprite kreiern
void CSprite::Create(LPDIRECT3DDEVICE9 lpDevice, int AnimationSpeed)
{
m_lpDevice = lpDevice;
m_AnimationSpeed = AnimationSpeed;
D3DXCreateSprite(m_lpDevice, &m_lpSprite);
m_vRotationCenter = D3DXVECTOR2((float)m_Width/2, (float)m_Height/2);
m_vScale = D3DXVECTOR2(1.0f,1.0f);
m_StepX = 10.0f;
m_StepY = 10.0f;
}
// Textur für das Sprite festlegen
void CSprite::AddTexture(LPDIRECT3DTEXTURE9 lpTexture)
{
// Beschreibung des zu Grunde liegenden Surfaces
D3DSURFACE_DESC desc;
lpTexture->GetLevelDesc(0,&desc);
// Breite und Höhe speichern
m_Width = desc.Width;
m_Height = desc.Height;
// Zeiger auf die Textur speichern
m_AnimationVec.push_back(lpTexture);
}
// Bewegung des Sprite
void CSprite::Move(DIRECTION dir)
{
// Bei der Bewegung werden die Bildschirmbegrenzungen beachtet
switch(dir)
{
case LEFT:
if(m_vPosition.x > 0)
{
m_vPosition.x -= m_StepX;
}
break;
case RIGHT:
if(m_vPosition.x < SCR_WIDTH - m_Width)
{
m_vPosition.x += m_StepX;
}
break;
case UP:
if(m_vPosition.y > 0)
{
m_vPosition.y -= m_StepY;
}
break;
case DOWN:
if(m_vPosition.y < SCR_HEIGHT - m_Height)
{
m_vPosition.y += m_StepY;
}
break;
}
}
// die Methode Bounce sorgt dafür, dass das Sprite
// an den Bildschirmbegrenzungen abprallt
void CSprite::Bounce(void)
{
// x- und y-Wert um StepX und StepY erhöhen
m_vPosition.x += m_StepX;
m_vPosition.y += m_StepY;
// wenn sich das Sprite aus dem Anzeigebereich
// bewegt, Richtung umkehren
if(m_vPosition.x < 0 || m_vPosition.x > SCR_WIDTH - m_Width)
{
m_StepX = -m_StepX;
}
if(m_vPosition.y < 0 || m_vPosition.y > SCR_HEIGHT - m_Height)
{
m_StepY = -m_StepY;
}
}
// Skalierung des Sprites
void CSprite::Scale(float dScale)
{
m_vScale.x += dScale;
m_vScale.y += dScale;
}
// Rotation des Sprites
void CSprite::Rotate(float dRotation)
{
m_Rotation += dRotation;
}
// Sprite zeichnen
void CSprite::Draw(void)
{
// Sprite in der passenden Animationsstufe zeichnen
m_lpSprite->Draw(m_AnimationVec[0],
0,
&m_vScale,
&m_vRotationCenter,
m_Rotation,
&m_vPosition,
0xFFFFFFFF);
}
|
Ressourcemanager und Direct3D sende ich nicht, da ich die nicht verändert habe.
Danke für die Mühe
Grüße
Matze _________________ Bitte besucht meine Webiste:
www.m-soft.de.tp
www.der-sternschnuppen-gruss.de.tp |
|
Nach oben |
|
 |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 05.07.2006, 19:10 Titel: |
|
|
Hast du die "dxerr9.lib" in das Projekt eingebunden? Sieht nämlich so aus, als würde die fehlen...
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 05.07.2006, 19:10 Titel: |
|
|
Das Problem, ist, das du Funktionen verwendest, die der Compiler beim linken nicht kennt. Du musst ihm nur sagen gegen welche Bibliothek er noch linken soll.
Welche das allerdings sind, muss dir jemand anders sagen
Wobei ich auf d3d8.lib oder d3dx8.lib tippe. _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
 |
Mr.Matze Mini JLI'ler

Alter: 32 Anmeldedatum: 05.07.2006 Beiträge: 27 Wohnort: Neustadt a. d. Weinstraße Medaillen: Keine
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 05.07.2006, 20:46 Titel: |
|
|
Wenn man schon weiß, das es sich um eine DX Funktion handelt, was aus dem Namen ja vhervorgeht, sollte man die Dokumentation öffnen und bei der Suche den Funktionsnamen eingeben. Das A@20 kann man weglassen, da der Compiler die Funktionsnamen nachträglich noch verändert (um Überladung möglich zu machen). Also am besten nur z.b. nach DXTrace suchen, noch besser nach *DXTrace* falls man zuviel weggelassen hat.
Sollte man die Funktion gefunden ahbne, steht ganz utnen die benötigten header und Libs. Das selbe gilt natürlich auch für Windowsfunktinen, die teilweise auch LIBS benötigen. Einfach in der Dokumentation anchsehen. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|