JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=d0981c3f0d56019b9280c985e6d66d8cMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Unicode (STL-String)
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
City Hunter
Super JLI'ler


Alter: 38
Anmeldedatum: 18.04.2004
Beiträge: 330
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 24.06.2006, 22:30    Titel: C2664 Fehler Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Jones
Senior JLI'ler


Alter: 33
Anmeldedatum: 03.03.2005
Beiträge: 208
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 24.06.2006, 23:24    Titel: Antworten mit Zitat

Du musst unter den Projekt Optionen Unicode ausschalten Wink (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 Wink 'wcslen' wäre die funktion für unicode charachters


Zuletzt bearbeitet von Jones am 24.06.2006, 23:31, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
City Hunter
Super JLI'ler


Alter: 38
Anmeldedatum: 18.04.2004
Beiträge: 330
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 24.06.2006, 23:28    Titel: Antworten mit Zitat

Jones hat Folgendes geschrieben:
Du musst unter den Projekt Optionen Unicode ausschalten Wink (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
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Jones
Senior JLI'ler


Alter: 33
Anmeldedatum: 03.03.2005
Beiträge: 208
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 24.06.2006, 23:32    Titel: Antworten mit Zitat

Jones hat Folgendes geschrieben:
Du musst unter den Projekt Optionen Unicode ausschalten Wink (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 Wink 'wcslen' wäre die funktion für unicode charachters

sorry
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
GreveN
JLI Master


Alter: 37
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 24.06.2006, 23:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
City Hunter
Super JLI'ler


Alter: 38
Anmeldedatum: 18.04.2004
Beiträge: 330
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 24.06.2006, 23:34    Titel: Antworten mit Zitat

Jones hat Folgendes geschrieben:
Jones hat Folgendes geschrieben:
Du musst unter den Projekt Optionen Unicode ausschalten Wink (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 Wink '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
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Jones
Senior JLI'ler


Alter: 33
Anmeldedatum: 03.03.2005
Beiträge: 208
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 24.06.2006, 23:37    Titel: Antworten mit Zitat

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


Wink
sprich du benutzt 'wcslen' anstatt 'strlen' Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
GreveN
JLI Master


Alter: 37
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 24.06.2006, 23:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
City Hunter
Super JLI'ler


Alter: 38
Anmeldedatum: 18.04.2004
Beiträge: 330
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 24.06.2006, 23:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Jones
Senior JLI'ler


Alter: 33
Anmeldedatum: 03.03.2005
Beiträge: 208
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 24.06.2006, 23:45    Titel: Antworten mit Zitat

Bei der fehlermeldung kann ich dir leider auch nicht weiterhelfen Sad
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 Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
City Hunter
Super JLI'ler


Alter: 38
Anmeldedatum: 18.04.2004
Beiträge: 330
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 24.06.2006, 23:50    Titel: Antworten mit Zitat

Jones hat Folgendes geschrieben:
Bei der fehlermeldung kann ich dir leider auch nicht weiterhelfen Sad
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 Wink


Ja brauche message, damit wird ein Text über die Figur angezeigt Wink

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
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
GreveN
JLI Master


Alter: 37
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 24.06.2006, 23:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
City Hunter
Super JLI'ler


Alter: 38
Anmeldedatum: 18.04.2004
Beiträge: 330
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 24.06.2006, 23:56    Titel: Antworten mit Zitat

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 Wink und da hatten die bestimmt noch kein 2003 oder 2005 Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
GreveN
JLI Master


Alter: 37
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 25.06.2006, 00:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
City Hunter
Super JLI'ler


Alter: 38
Anmeldedatum: 18.04.2004
Beiträge: 330
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 25.06.2006, 00:10    Titel: Antworten mit Zitat

GreveN hat Folgendes geschrieben:
Naja, ich bin mir grade nicht sicher, dass ich verstanden habe worauf du hinaus willst (ich nehme mal an Compiler Wink), aber so standardkonform dürfte doch sogar der gute alte VC6 sein, dass er das alles beherrscht. Wink


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
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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

Impressum