|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 24.06.2006, 21:30 Titel: C2664 Fehler |
|
|
Hey,
ich wollte kein neues Thmea auf machen wegen den Fehlercode, deswegen habe ich den hier rein geschrieben.
Hier die Fehlermedlung
Fehler 2 error C2664: 'strlen': Konvertierung des Parameters 1 von 'wchar_t *' in 'const char *' nicht möglich l:\eigene dateien win2k\visual studio 2005\projects\winx\winx\main.cpp 760
Könnte mir da jemand helfen? Ich nutze MVS 2005.
Hier der Fehler COde ausschnitt.
CPP: | // Zeichnet den Text über den Bob
[b]length = strlen(messages[mindex]);[/b]
TextOut(xdc,creature.x - (4*length) + 32,creature.y-32,messages[mindex],length); |
Was Fett geschrieben ist ist der Fehler.
Hier der ganze code.
CPP: | // WINX.CPP - Game Console Shell
// INCLUDES ///////////////////////////////////////////////
#define WIN32_LEAN_AND_MEAN
#define INITGUID // for directx
#include <windows.h> // include important windows stuff
#include <windowsx.h>
#include <mmsystem.h>
#include <iostream> // include important C/C++ stuff
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <math.h>
#include <io.h>
#include <fcntl.h>
#include <dos.h>
#include <ddraw.h> // DirectX Include
// DEFINES ////////////////////////////////////////////////
// defines für Fenster
#define WINDOW_CLASS_NAME L"WINXCLASS" // class name
#define WINDOW_WIDTH 320 // size of window
#define WINDOW_HEIGHT 240
#define SCREEN_WIDTH 640 // size of screen
#define SCREEN_HEIGHT 480
#define SCREEN_BPP 16 // bits per pixel
#define BITMAP_ID 0x4D42 // Universal ID für ein Bitmap
// defines for BOBs
#define BOB_STATE_DEAD 0 // erzeugt ein Toden BOB
#define BOB_STATE_ALIVE 1 // erzeugt ein Lebener BOB
#define BOB_STATE_LOADED 2 // Der BoB wir geladen
// MACROS /////////////////////////////////////////////////
// these read the keyboard asynchronously
#define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
// erzeugt einen 16- Bit Farbwert im Format 5.5.5 (1-Bit-Alpha Modus)
#define _RGB16BIT555(r,g,b) ((b & 31) + ((g & 31) << 5) + ((r & 31) << 10))
// erzeugt einen 16- Bit Farbwert im Format 5.6.5 (green dominate mode)
#define _RGB16BIT565(r,g,b) ((b & 31) + ((g & 63) << 5) + ((r & 31) << 11))
// TYPES //////////////////////////////////////////////////
typedef unsigned short USHORT;
typedef unsigned short WORD;
typedef unsigned char UCHAR;
typedef unsigned char BYTE;
// Behälterstruktur für bitmaps .BMP Datei
typedef struct BITMAP_FILE_TAG
{
BITMAPFILEHEADER bitmapfileheader; // erzeuge Behälter für des Bitmapfile Header
BITMAPINFOHEADER bitmapinfoheader; // sammle alle Info der include der platte
PALETTEENTRY palette[256]; // Wir werden die Palette hier versorgen
UCHAR *buffer; // Das ist ein Zeiger zu den Daten
}
BITMAP_FILE, *BITMAP_FILE_PTR;
// der blitter Object Struktur BOB
typedef struct BITMAP_OBJ_TYP
{
int state; // Der Status des Object (Generell)
int attr; // Eigenschaften betreffe für das Object
int x,y; // Position des bitmap wird aufen Display angezeigt
int xv, yv; // geschwindigkeit des object
int width, height; // Die Breite und Höhe für das Bitmap
LPDIRECTDRAWSURFACE7 image; // the bitmap surface itself
}
BITMAP_OBJ, *BITMAP_OBJ_PTR;
// PROTOTYPES /////////////////////////////////////////////
// game console
int Game_Init(void *parms=NULL);
int Game_Shutdown(void *parms=NULL);
int Game_Main(void *parms=NULL);
// bitmaps
int Load_Bitmap_File(BITMAP_FILE_PTR bitmap, char *filename);
int Unload_Bitmap_File(BITMAP_FILE_PTR bitmap);
int Flip_Bitmap(UCHAR *image, int bytes_per_line, int height);
// bobs
int Draw_BOB16(BITMAP_OBJ_PTR bob,LPDIRECTDRAWSURFACE7 dest);
int Destroy_BOB16(BITMAP_OBJ_PTR bob);
int Create_BOB16(BITMAP_OBJ_PTR bob, int width, int height,int attr, int flags);
int Load_BOB16(BITMAP_OBJ_PTR bob, BITMAP_FILE_PTR bitmap,int cx,int cy,int mode);
// GLOBALS ////////////////////////////////////////////////
HWND main_window_handle = NULL; // save the window handle
HINSTANCE main_instance = NULL; // save the instance
char buffer[80]; // used to print text
LPDIRECTDRAW7 lpdd = NULL; // dd Object
LPDIRECTDRAWSURFACE7 lpddsprimary = NULL; // dd primary surface
LPDIRECTDRAWSURFACE7 lpddsback = NULL; // dd back surface
LPDIRECTDRAWPALETTE lpddpal = NULL; // a pointer to the created dd palatte
PALETTEENTRY palette[256]; // Farben der paletten
DDSURFACEDESC2 ddsd; // a direct draw surface description struct
DDBLTFX ddbltfx; // used to fill
DDSCAPS2 ddscaps; // a direct draw surface capabilities struct
HRESULT ddrval; // result back form dd calls
UCHAR *primary_buffer = NULL; // primary video buffer
UCHAR *back_buffer = NULL; // secondary back buffer
BITMAP_FILE bitmap16bit, // ein 16- Bit Bitmap Datei
bitmap8bit; // ein 8- Bit Bitmap Datei
BITMAP_OBJ creature; // the creature
// FUNCTIONS //////////////////////////////////////////////
int Load_Bitmap_File(BITMAP_FILE_PTR bitmap, char *filename)
{
// DIese Funktion öffnet eine Bitmap Datei und Lädt die Datei
int file_handle, // the file handle
index; // looping index
UCHAR *temp_buffer = NULL; // Verwendet, um 24-Bit-Images zu 16 Bit umzuwandeln
OFSTRUCT file_data; // Die Dateidateninformation
// Öffnen Sie die Datei, wenn es besteht
if ((file_handle = OpenFile(filename,&file_data,OF_READ))==-1)
return(0);
// Laden jetzt den bitmap Dateikopfball
_lread(file_handle, &bitmap->bitmapfileheader,sizeof(BITMAPFILEHEADER));
// Test, wenn das eine bitmap Datei ist
if (bitmap->bitmapfileheader.bfType!=BITMAP_ID)
{
// Schließe die Datei
_lclose(file_handle);
// return error
return(0);
} // end if
// Jetzt wissen wir, dass das ein bitmap ist, so lesen Sie in allen Abteilungen
// Zuerst der bitmap infoheader
// Laden jetzt den bitmap Datei header
_lread(file_handle, &bitmap->bitmapinfoheader,sizeof(BITMAPINFOHEADER));
// Laden jetzt die Farbpalette
if (bitmap->bitmapinfoheader.biBitCount == 8)
{
_lread(file_handle, &bitmap->palette,256*sizeof(PALETTEENTRY));
// Jetzt Setz alle Flags in der Palette richtig
// BGR RGBQUAD Daten Format
for (index=0; index < 256; index++)
{
// reverse the red and green fields
int temp_color = bitmap->palette[index].peRed;
bitmap->palette[index].peRed = bitmap->palette[index].peBlue;
bitmap->palette[index].peBlue = temp_color;
// Setz die Flags
bitmap->palette[index].peFlags = PC_NOCOLLAPSE;
} // end for index
} // end if
// Finale der Imagedaten
_lseek(file_handle,-(int)(bitmap->bitmapinfoheader.biSizeImage),SEEK_END);
// now read in the image, if the image is 8 or 16 bit then simply read it
// but if its 24 bit then read it into a temporary area and then convert
// it to a 16 bit image
if (bitmap->bitmapinfoheader.biBitCount==8 || bitmap->bitmapinfoheader.biBitCount==16)
{
// teile den speicher für das Image zu
if (!(bitmap->buffer = (UCHAR *)malloc(bitmap->bitmapinfoheader.biSizeImage)))
{
// Schliese die Datei
_lclose(file_handle);
// return error
return(0);
} //end if
// lese jetzt in
_lread(file_handle,bitmap->buffer,bitmap->bitmapinfoheader.biSizeImage);
} // end if
else
{
// Das muss ein 24-Bit-Image sein, es darin laden und es zu 16 Bit umwandeln
// printf("\nconverting 24 bit image...");
// allocate temporary buffer
if(!(temp_buffer = (UCHAR *)malloc(bitmap->bitmapinfoheader.biSizeImage)))
{
// Schließe die Datei
_lclose(file_handle);
// return error
return(0);
} // end if
// allocate final 16 bit storage buffer
if (!(bitmap->buffer=(UCHAR *)malloc(2*bitmap->bitmapinfoheader.biWidth*bitmap->bitmapinfoheader.biHeight)))
{
// schließe Die Datei
_lclose(file_handle);
// release working buffer
free(temp_buffer);
// return error
return(0);
} // end if
// lese jetzt in
_lread(file_handle,temp_buffer,bitmap->bitmapinfoheader.biSizeImage);
// Konventiert jetzt jedes 24-Bit RGB Wert in ein 16-Bit Wert
for (index=0; index<bitmap->bitmapinfoheader.biWidth*bitmap->bitmapinfoheader.biHeight; index++)
{
// extract RGB components (note they are in memory BGR)
// also, assume 5.6.5 format, so scale appropriately
UCHAR red = (temp_buffer[index*3 + 2] >> 3), // 5 Bits
green = (temp_buffer[index*3 + 1] >> 2), // 6 Bits, change to 3 for 5 Bits
blue = (temp_buffer[index*3 + 0] >> 3); // 5 Bits
// Bau auf 16-Bit Farben nehme Format 5.6.5
USHORT color = _RGB16BIT565(red,green,blue);
// Schreibe Farben im Buffer
((USHORT *)bitmap->buffer)[index] = color;
} // end for index
// Finalles schreiben der Korekten nummer von Bits
bitmap->bitmapinfoheader.biBitCount=16;
} // end if
#if 0
// schreib die Daten aus
printf("\nfilename:%s \nsize=%d \ nwidth=%d \nheight=%d \nbitsperpixel=%d \ ncolors=%d \nimpcolors=%d",
filename,
bitmap->bitmapinfoheader.biSizeImage,
bitmap->bitmapinfoheader.biWidth,
bitmap->bitmapinfoheader.biHeight,
bitmap->bitmapinfoheader.biBitCount,
bitmap->bitmapinfoheader.biClrUsed,
bitmap->bitmapinfoheader.biClrImportant);
#endif
// Schließe die Datei
_lclose(file_handle);
// Flip die Bitmap
Flip_Bitmap(bitmap->buffer,
bitmap->bitmapinfoheader.biWidth*(bitmap->bitmapinfoheader.biBitCount/8),
bitmap->bitmapinfoheader.biHeight);
// return success
return(1);
} // end Load_Bitmap_File
///////////////////////////////////////////////////////////
int Unload_Bitmap_File(BITMAP_FILE_PTR bitmap)
{
// Diese Funktion löscht alle speicher des "Bitmaps"
if (bitmap->buffer)
{
// Freigabe des Speichers
free(bitmap->buffer);
// neustart des Pointer
bitmap->buffer = NULL;
} // end if
// return success
return(1);
} // end Unload_Bitmap_File
///////////////////////////////////////////////////////////
int Flip_Bitmap(UCHAR *image, int bytes_per_line, int height)
{
// Diese Funktion wird verwendet, um umgekehrt .BMP Images zu schnipsent
UCHAR *buffer; // Verwendet, um die Bildverarbeitung durchzuführen
int index; // looping index
// Kopie-Image zum Arbeitsbereich
memcpy(buffer,image,bytes_per_line*height);
// flip vertically
for (index=0; index < height; index++)
memcpy(&image[((height-1) - index)*bytes_per_line],
&buffer[index*bytes_per_line], bytes_per_line);
// release the memory
free(buffer);
// return success
return(1);
} // end Flip_Bitmap
///////////////////////////////////////////////////////////
int Create_BOB16(BITMAP_OBJ_PTR bob, // the bob to create
int width, int height, // size of bob
int attr, // attrs
int flags = 0) // memory flag
{
// Schaffen Sie den Gegenstand von BOB, bemerken Sie,
// dass SICH alles AUF UND AB BEWEGT,
// werden als offscreen Oberflächen in VRAM als der Verzug geschaffen,
// wenn Sie Systemgedächtnis dann
// DDSCAPS_SYSTEMMEMORY gleiche Satz-Fahnen verwenden wollen
DDSURFACEDESC2 ddsd; // used to create surface
// setz Status und Attribute von BOB
bob->state = BOB_STATE_ALIVE;
bob->attr = attr;
bob->image = NULL;
// Setz Position und velocity to 0
bob->x = bob->y = bob->xv = bob->yv = 0;
// set to access caps, width, and height
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
// set dimensions of the new bitmap surface
ddsd.dwWidth = bob->width = width;
ddsd.dwHeight = bob->height = height;
// set surface to offscreen plain
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | flags;
// create the surface
if (lpdd->CreateSurface(&ddsd,&(bob->image),NULL)!=DD_OK)
return(0);
// Setz Farbschlüssel für RGB Farben(0,0,0)
DDCOLORKEY color_key; // used to set color key
color_key.dwColorSpaceLowValue = _RGB16BIT565(0,0,0);
color_key.dwColorSpaceHighValue = _RGB16BIT565(0,0,0);
// Setzen Sie jetzt den Farbenschlüssel für die Quelle blitting
(bob->image)->SetColorKey(DDCKEY_SRCBLT, & color_key);
// return success
return(1);
} // end Create_BOB16
////////////////////////////////////////////////////////////
int Deastroy_BOB16(BITMAP_OBJ_PTR bob)
{
// Zerstöre den BOB, einfache neustart des Surface
if (bob->image)
(bob->image)->Release();
else
return(0);
// return success
return(1);
} // end Destroy_BOB16
////////////////////////////////////////////////////////////
int Draw_BOB16(BITMAP_OBJ_PTR bob, // Bob, zu zeichen
LPDIRECTDRAWSURFACE7 dest) // surface to Draw the bob on
{
// Ziehen Sie einen Bob am x, y definiert im BOB auf der
// in dest definierten Bestimmungsort-Oberfläche an
RECT dest_rect, // Das Bestimmungsort-Rechteck
source_rect; // Das Quellrechteck
// Füllen Sie den Bestimmungsort rect aus
dest_rect.left = bob->x;
dest_rect.top = bob->y;
dest_rect.right = bob->x+bob->width;
dest_rect.bottom = bob->y+bob->height;
// Füllen Sie die Quelle rect aus
source_rect.left = 0;
source_rect.top = 0;
source_rect.right = bob->width;
source_rect.bottom = bob->height;
// Blt zur Bestimmungsort-Oberfläche
dest->Blt(&dest_rect, bob->image,
&source_rect, (DDBLT_WAIT | DDBLT_KEYSRC),
NULL);
// return success
return(1);
} // end Draw_BOB16
///////////////////////////////////////////////////////////
int Load_BOB16(BITMAP_OBJ_PTR bob, // Lade die Bob date
BITMAP_FILE_PTR bitmap, // Scanne Bitmapdatei der form
int cx, int cy, // cell or absolute pos. to scan image form
int mode) // if 0 then cx,cy is cell position, else
// cx,cy are absolute coords
{
// Diese Funktion Extrahiert ein Bitmap
USHORT *source_ptr, // working pointers
*dest_ptr;
DDSURFACEDESC2 ddsd; // direct draw surface description
// test the mode of extraction, cell based or absolute
if (mode==0)
{
// re-compute x,y
cx = cx*(bob->width+1) +1;
cy = cy*(bob->height+1) +1;
} // end if
// Extrakt bitmap Daten
source_ptr = (USHORT *)bitmap->buffer + cy*bitmap->bitmapinfoheader.biWidth+cx;
// Bekommen Sie den addr zum Bestimmungsort-Oberflächengedächtnis
// setz größe der Struktur
ddsd.dwSize = sizeof(ddsd);
// lock the display surface
(bob->image)->Lock(NULL,
&ddsd,
DDLOCK_WAIT |DDLOCK_SURFACEMEMORYPTR,
NULL);
// Teilen Sie einen Punkt der Speicheroberfläche für die Manipulation zu
dest_ptr = (USHORT *)ddsd.lpSurface;
// Wiederholen Sie durch jeden scanline und kopieren Sie bitmap
for (int index_y=0; index_y<bob->height; index_y++)
{
// copy next line of data to destination
memcpy(dest_ptr, source_ptr,(bob->width*2));
// advance pointers
dest_ptr += (ddsd.lPitch/2);
source_ptr += bitmap->bitmapinfoheader.biWidth;
} // end for index_y
// unlock the surface
(bob->image)->Unlock(NULL);
// set state to loaded
bob->state |= BOB_STATE_LOADED;
// return success
return(1);
} // end Load_BOB16
//////////////////////////////////////////////////////////
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam)
{
// Hauptnachrichtenverarbeitung des Systems
PAINTSTRUCT ps; // wird in WM_PAINT verwendet
HDC hdc; // Handle für Gerätekontext
// Was ist in der Nachricht enthalten?
switch(msg)
{
case WM_CREATE:
{
// hier erfolgt die Initialisierung
return(0);
}
break;
case WM_PAINT:
{
// Fenster einfach anzeigen
hdc = BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
return(0);
}
break;
case WM_DESTROY:
{
// Applikation abbrechen
PostQuitMessage(0);
return(0);
}
break;
default:break;
} // end switch
// nicht vearbeitete Nachrichten verarbeiten
return (DefWindowProc(hwnd, msg, wparam, lparam));
} // end WinProc
// WINMAIN ////////////////////////////////////////////////
int WINAPI WinMain( HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{
WNDCLASS winclass; // nimmt die von uns erzeugte Klasse auf
HWND hwnd; // generischer Fenster-Handle
MSG msg; // generische Nachricht
// Fensterklassenstruktur füllen
winclass.style = CS_DBLCLKS | CS_OWNDC |
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;
// Fensterklasse registrieren
if (!RegisterClass(&winclass))
return(0);
// Fenster erstellen
if (!(hwnd = CreateWindow(WINDOW_CLASS_NAME, // Klasse
L"WinX Game Console", // Title
WS_POPUP | WS_VISIBLE,
0,0, // x,y
WINDOW_WIDTH, // Breite
WINDOW_HEIGHT, // Höhe
NULL, // Handle f. übergeord. Fenster
NULL, // Handle für Menü
hinstance, // Instanz
NULL))) // Parameter für Erstellung
return(0);
// Verbergen Sie die Maus
ShowCursor(FALSE);
// Fenster-Handle in einer globalen Variablen speichern
main_window_handle = hwnd;
main_instance = hinstance;
// perform all game console specific initialization
Game_Init();
// Eintritt in die Hauptereignisschleife
while(1)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
// prüfen. ob Beenden (Quit) angefordert wurde
if (msg.message == WM_QUIT)
break;
// Beschleunigungstasten überstzen
TranslateMessage(&msg);
// Nachricht an die Fensterprozedur senden
DispatchMessage(&msg);
} // end if
// Hier beginnt die Hauptverarbeitung für das Spiel
Game_Main();
} // end while
// SPiel beenden und Ressurcen freigeben
Game_Shutdown();
// return to Windows like this
return(msg.wParam);
} // end WinMain
// WINX GAME PROGRAMMING CONSOLE FUNCTIONS ////////////////
int Game_Init(void *parms)
{
// In dieser Funktion erfolgt die gesamte Initialisierung
// für das Spiel
// Hier steht der Code
// Diese Funktion besteht darin, wo Sie die
// ganze Initialisierung für Ihr Spiel tun
// Schaffen Sie Gegenstand und Test für den Fehler
if (DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL) !=DD_OK)
return(0);
// set cooperation level to windowed mode normal
if (lpdd->SetCooperativeLevel(main_window_handle,
DDSCL_NORMAL) !=DD_OK)
return(0);
// setz den Bildschirmmodus
if (lpdd->SetDisplayMode(SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_BPP,0,0)!=DD_OK)
return(0);
// Create the primary surface
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
// we need to let dd know that we want a complex
// flippable surface structure, set flags for that
ddsd.ddsCaps.dwCaps =
DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
// set the backbuffer sount to 1
ddsd.dwBackBufferCount = 1;
// create the primary surface
lpdd->CreateSurface(&ddsd,&lpddsprimary,NULL);
// Frage für den backbuffer d. h. die sekundäre Oberfläche
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
lpddsprimary->GetAttachedSurface(&ddscaps,&lpddsback);
// now load the 8 bit color bitmap
Load_Bitmap_File(&bitmap16bit, "Monstr16.BMP");
// create creature BOB
Create_BOB16(&creature,96,64,0,DDSCAPS_SYSTEMMEMORY);
// extract bitmap image for BOB, note that this time
// the entrie bitmap is the bob
Load_BOB16(&creature,&bitmap16bit,0,0,1);
// set position and verlocity
creature.x = 0;
creature.y = SCREEN_HEIGHT/2;
creature.xv = 4;
creature.yv = 0;
// clear the primary and secondary surfaces
memset(&ddbltfx,0,sizeof(ddbltfx));
ddbltfx.dwSize = sizeof(ddbltfx);
ddbltfx.dwFillColor = 0;
lpddsprimary->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&ddbltfx);
lpddsback->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&ddbltfx);
// delete the Bitmap
Unload_Bitmap_File(&bitmap8bit);
// Erfolg zurückmelden
return(1);
} // end Game_Init
///////////////////////////////////////////////////////////
int Game_Shutdown(void *parms)
{
// Spiel beenden und die in dieser Funktion reserviereten
// Ressourcen freigeben
// Hier steht der Code
// delete bob
Destroy_BOB16(&creature);
// dirst release the secondary surface
if (lpddsback!=NULL)
lpddsback->Release();
// now release the primary surface
if (lpddsprimary!=NULL)
lpddsprimary->Release();
// release the directdraw object
if (lpdd!=NULL)
lpdd->Release();
// Erfolgt zurückmelden
return(1);
} // end Game_Shutdown
///////////////////////////////////////////////////////////
int Game_Main(void *parms)
{
// Dies ist das Arbeitspferd des Spiels, es wird ständig in Echtzeit
// aufgerufen, wie main() in c; hier erfolgen alle Aufrufe für das Spiel!
// Hier steht der Code
int index, // looping variable
length; // length of current message
static int mindex=0, // current message being played
mcount=0; // timing counter to update messages
static wchar_t * messages[] = {L"Will", L"Work", L"For", L"Energion Cubes"};
// chech of user is trying to exit
if (KEY_DOWN(VK_ESCAPE) || KEY_DOWN(VK_SPACE))
PostMessage(main_window_handle, WM_DESTROY,0,0);
// clear secondary buffer
memset(&ddbltfx,0,sizeof(ddbltfx));
ddbltfx.dwSize = sizeof(ddbltfx);
ddbltfx.dwFillColor = 0;
lpddsback->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&ddbltfx);
// move creature
creature.x+=creature.xv;
// test if creature is offscreen
if (creature.x >= SCREEN_WIDTH)
creature.x = 0;
// draw creature
Draw_BOB16(&creature, lpddsback);
// now use GDI to draw text above monster
HDC xdc; // the working dc
// get the dc from secondary back buffer
lpddsback->GetDC(&xdc);
// set the colors for the text up
SetTextColor(xdc, RGB(0,0,255));
// set background mode to transparent so black isn't copied
SetBkMode(xdc, TRANSPARENT);
// Zeichnet den Text über den Bob
length = strlen(messages[mindex]);
TextOut(xdc,creature.x - (4*length) + 32,creature.y-32,messages[mindex],length);
// relese the dc
lpddsback->ReleaseDC(xdc);
// flip pages
while(lpddsprimary->Flip(NULL, DDFLIP_WAIT)!=DD_OK);
// slow things down
Sleep(30);
// update the message string
if (++mcount > 30)
{
// reset count
mcount = 0;
// update message
if (++mindex >=4)
mindex=0;
} // end if
// Erfolg zurückmelden
return(1);
} // end Game_Main
/////////////////////////////////////////////////////////// | [/cpp]
Vielen Dank für Eure Hilfe. |
|
Nach oben |
|
|
Jones Senior JLI'ler
Alter: 33 Anmeldedatum: 03.03.2005 Beiträge: 208 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 24.06.2006, 22:24 Titel: |
|
|
Du musst unter den Projekt Optionen Unicode ausschalten (Zeichensatz oder so heißt das(hab leider gard kein vs 2005 in der nähe) das musst du umstellen)
edit: ähm, ich weiß nicht ob der Post dir helfen wird. was ist 'messages' vom typ? Wenn 'messages' vom typ 'wchar_t' ist kann das mit 'strlen' auch nicht funktionieren denn strlen nimmt nur char's an und keine wchar_t's denn wchar_t ist unicode 'wcslen' wäre die funktion für unicode charachters
Zuletzt bearbeitet von Jones am 24.06.2006, 22:31, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 24.06.2006, 22:28 Titel: |
|
|
Jones hat Folgendes geschrieben: | Du musst unter den Projekt Optionen Unicode ausschalten (Zeichensatz oder so heißt das(hab leider gard kein vs 2005 in der nähe) das musst du umstellen)
edit: ähm, ich weiß nicht ob der Post dir helfen wird. wasist |
Muss ick denn nicht alles wieder umändern was ick schon für Unicode geändert habe? |
|
Nach oben |
|
|
Jones Senior JLI'ler
Alter: 33 Anmeldedatum: 03.03.2005 Beiträge: 208 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 24.06.2006, 22:32 Titel: |
|
|
Jones hat Folgendes geschrieben: | Du musst unter den Projekt Optionen Unicode ausschalten (Zeichensatz oder so heißt das(hab leider gard kein vs 2005 in der nähe) das musst du umstellen)
edit: ähm, ich weiß nicht ob der Post dir helfen wird. was ist 'messages' vom typ? Wenn 'messages' vom typ 'wchar_t' ist kann das mit 'strlen' auch nicht funktionieren denn strlen nimmt nur char's an und keine wchar_t's denn wchar_t ist unicode 'wcslen' wäre die funktion für unicode charachters |
sorry |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 24.06.2006, 22:33 Titel: |
|
|
Für Unicode gibt's ein Pendant der Funktion, 'wstrlen' wenn mich nicht alles täuscht. Alternativ einfach einem 'std::wstring' zuweisen und Methode 'length' benutzen. |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 24.06.2006, 22:34 Titel: |
|
|
Jones hat Folgendes geschrieben: | Jones hat Folgendes geschrieben: | Du musst unter den Projekt Optionen Unicode ausschalten (Zeichensatz oder so heißt das(hab leider gard kein vs 2005 in der nähe) das musst du umstellen)
edit: ähm, ich weiß nicht ob der Post dir helfen wird. was ist 'messages' vom typ? Wenn 'messages' vom typ 'wchar_t' ist kann das mit 'strlen' auch nicht funktionieren denn strlen nimmt nur char's an und keine wchar_t's denn wchar_t ist unicode 'wcslen' wäre die funktion für unicode charachters |
sorry |
Jetzt hab ick Unicode ausgestellt und alles geändert ^^, muss ick det noch mal machen *g* |
|
Nach oben |
|
|
Jones Senior JLI'ler
Alter: 33 Anmeldedatum: 03.03.2005 Beiträge: 208 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 24.06.2006, 22:37 Titel: |
|
|
ne, ich meinte das
Zitat: |
ähm, ich weiß nicht ob der Post dir helfen wird. was ist 'messages' vom typ? Wenn 'messages' vom typ 'wchar_t' ist kann das mit 'strlen' auch nicht funktionieren denn strlen nimmt nur char's an und keine wchar_t's denn wchar_t ist unicode Wink 'wcslen' wäre die funktion für unicode charachters
|
sprich du benutzt 'wcslen' anstatt 'strlen' |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 24.06.2006, 22:38 Titel: |
|
|
Ich versteh' grade nicht so ganz, was ihr beide wollt. :P
Also wenn du voll fett krass Unicode-Support willst, dann musst du halt 'wchar_t' als elementaren Zeichentyp verwenden und dir für die Stringfunktionen die Unicode-Äquivalente raussuchen ('wstrlen' usw.), oder du verwendest halt einfach 'std::wstring' bzw. 'std::basic_string<wchar_t>'.
Edit: Ah jetzt hat's auch bei mir geklickt. |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 24.06.2006, 22:40 Titel: |
|
|
Neuer Code
CPP: | // Zeichnet den Text über den Bob
length = wcslen(messages[mindex]);
TextOut(xdc,creature.x - (4*length) + 32,creature.y-32,messages[mindex],length); |
Hier der abschnitt zum Code
CPP: | int Game_Main(void *parms)
{
// Dies ist das Arbeitspferd des Spiels, es wird ständig in Echtzeit
// aufgerufen, wie main() in c; hier erfolgen alle Aufrufe für das Spiel!
// Hier steht der Code
int index, // looping variable
length; // length of current message
static int mindex=0, // current message being played
mcount=0; // timing counter to update messages
static wchar_t * messages[] = {L"Will", L"Work", L"For", L"Energion Cubes"};
// chech of user is trying to exit
if (KEY_DOWN(VK_ESCAPE) || KEY_DOWN(VK_SPACE))
PostMessage(main_window_handle, WM_DESTROY,0,0);
// clear secondary buffer
memset(&ddbltfx,0,sizeof(ddbltfx));
ddbltfx.dwSize = sizeof(ddbltfx);
ddbltfx.dwFillColor = 0;
lpddsback->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&ddbltfx);
// move creature
creature.x+=creature.xv;
// test if creature is offscreen
if (creature.x >= SCREEN_WIDTH)
creature.x = 0;
// draw creature
Draw_BOB16(&creature, lpddsback);
// now use GDI to draw text above monster
HDC xdc; // the working dc
// get the dc from secondary back buffer
lpddsback->GetDC(&xdc);
// set the colors for the text up
SetTextColor(xdc, RGB(0,0,255));
// set background mode to transparent so black isn't copied
SetBkMode(xdc, TRANSPARENT);
// Zeichnet den Text über den Bob
length = wcslen(messages[mindex]);
TextOut(xdc,creature.x - (4*length) + 32,creature.y-32,messages[mindex],length);
// relese the dc
lpddsback->ReleaseDC(xdc);
// flip pages
while(lpddsprimary->Flip(NULL, DDFLIP_WAIT)!=DD_OK);
// slow things down
Sleep(30);
// update the message string
if (++mcount > 30)
{
// reset count
mcount = 0;
// update message
if (++mindex >=4)
mindex=0;
} // end if
// Erfolg zurückmelden
return(1);
} // end Game_Main
/////////////////////////////////////////////////////////// |
Nutze jetzt wcslen, und jetzt kommt der Fehler.
Fehler 5 fatal error LNK1104: Datei "coredll.lib" kann nicht geöffnet werden. WinX |
|
Nach oben |
|
|
Jones Senior JLI'ler
Alter: 33 Anmeldedatum: 03.03.2005 Beiträge: 208 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 24.06.2006, 22:45 Titel: |
|
|
Bei der fehlermeldung kann ich dir leider auch nicht weiterhelfen
Brauchst du unbendingt 'messages' als charachter? wenn nicht, kannst du, wie Greven schon geschrieben hat std::wstring benutzen. damit kommst du viel leichter an die länge des strings und vielleicht ist auch diese fehlermeldung weg |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 24.06.2006, 22:50 Titel: |
|
|
Jones hat Folgendes geschrieben: | Bei der fehlermeldung kann ich dir leider auch nicht weiterhelfen
Brauchst du unbendingt 'messages' als charachter? wenn nicht, kannst du, wie Greven schon geschrieben hat std::wstring benutzen. damit kommst du viel leichter an die länge des strings und vielleicht ist auch diese fehlermeldung weg |
Ja brauche message, damit wird ein Text über die Figur angezeigt
Edit: okay habe jetzte.
CPP: | length = std::wstring(messages[mindex]);
TextOut(xdc,creature.x - (4*length) + 32,creature.y-32,messages[mindex],length); | gehscireben. muss ich da noch was verändern oder reicht nur das? |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 24.06.2006, 22:54 Titel: |
|
|
Was heißt denn "als Characters brauchen"? Dafür gibt's doch die 'c_str()-Methode' vom 'std::wstring', die liefert dir eben ein klassisches C Zeichen-Array (logischerweise vom Typ 'wchar_t').
Btw.: Irgendwie ist die Frage in diesem Thread falsch aufgehoben, vielleicht kann das ein Mod ja mal korrigieren. |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 24.06.2006, 22:56 Titel: |
|
|
GreveN hat Folgendes geschrieben: | Was heißt denn "als Characters brauchen"? Dafür gibt's doch die 'c_str()-Methode' vom 'std::wstring', die liefert dir eben ein klassisches C Zeichen-Array (logischerweise vom Typ 'wchar_t').
Btw.: Irgendwie ist die Frage in diesem Thread falsch aufgehoben, vielleicht kann das ein Mod ja mal korrigieren. |
Naja uck habe noch sohn altes DirectX Buch, da wurde noch mit DX7 geschrieben und da hatten die bestimmt noch kein 2003 oder 2005 |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 24.06.2006, 23:05 Titel: |
|
|
Naja, ich bin mir grade nicht sicher, dass ich verstanden habe worauf du hinaus willst (ich nehme mal an Compiler ;)), aber so standardkonform dürfte doch sogar der gute alte VC6 sein, dass er das alles beherrscht. ;) |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 24.06.2006, 23:10 Titel: |
|
|
GreveN hat Folgendes geschrieben: | Naja, ich bin mir grade nicht sicher, dass ich verstanden habe worauf du hinaus willst (ich nehme mal an Compiler ), aber so standardkonform dürfte doch sogar der gute alte VC6 sein, dass er das alles beherrscht. |
Ick globe den VC6 habe ick nicht mehr ^^ oder kann ihn nicht finden *g*.
Und was soll ick nun mit den Fehler machen, den er mir anzeigt ^^ |
|
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
|