Allegro - im spiel was schreiben und wieder löschen ... wie ???
-
Hallo;)
ich schreibe gerade an ein spiel und will folgendes machen:wenn man im spiel auf C drückt (weils anders nicht machbar ist)
soll man in einer "gemalten" konsole was eingeben können.
das tuts auch soweit aber wenn man "c" drückt steht in der konsole" befehl: c" und ich kann das eingegebende nicht mit
backspace löschen - drück ich backspace ist alles aufenmal schwartzweil das irgentwie mit screen aus void eingabe und buffer aus void start_game zusammen hängt
wenn man alles in start_game schreiben würde und über if(..key_c) macht dann tuts das wohl aber wenn man dann c drückt kackt das programm ab WARUM ???
meine frage:
- wie kann ich das trotzdem löschen ohne das alles verschwindet??
- warum tuts meine text abfrage nicht ???- hier der code:
#define ALLEGRO_USE_CONSOLE 1 // hab ich nach stunden ergoogelt für sprinf... #include <allegro.h> #include <winalleg.h> #include <stdio.h> bool main_is_running = false; bool title_is_running = false; bool game_is_running = false; int space_select = 0; int game_ini = 0; int ship_x = 400; int ship_y = 300; void load_cache(); void start_title(); void start_game(); void Eingabe (FONT*,char*,int,int,int,int,char*); BITMAP *back1; BITMAP *title1; BITMAP *title2; BITMAP *ship; BITMAP *ship_off; BITMAP *inventar; BITMAP *buffer; int main() { allegro_init(); set_color_depth(32); set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0); install_timer(); install_keyboard(); install_mouse(); buffer = create_bitmap(800,600); load_cache(); start_title(); // FAIL XD // while(!main_is_running) { if(key[KEY_ESC]) { main_is_running = true; } // FAIL XD /// } return 0; } END_OF_MAIN(); void load_cache() { title1 = load_bitmap("bmp\\titel1.bmp",NULL); title2 = load_bitmap("bmp\\titel2.bmp",NULL); ship = load_bitmap("bmp\\ship.bmp",NULL); ship_off = load_bitmap("bmp\\ship_off.bmp",NULL); back1 = load_bitmap("bmp\\back1.bmp",NULL); inventar = load_bitmap("bmp\\inventar.bmp",NULL); } void start_title() { draw_sprite(screen,title1,0,0); Sleep(5000); clear_bitmap(screen); Sleep(2000); draw_sprite(screen,title2,0,0); while(!title_is_running) { if(key[KEY_SPACE]) { space_select = 1; } if(space_select == 1) { space_select == 0; clear_bitmap(screen); Sleep(2000); start_game(); title_is_running = true; } } } void start_game() { char Name[15]; while(!key[KEY_ESC]) { clear(buffer); draw_sprite(buffer,back1,0,0); draw_sprite(buffer,inventar,0,0); draw_sprite(buffer,ship_off,ship_x,ship_y); blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); if(key[KEY_C]) { Eingabe(font,"Befehl:",0,0, makecol(0, 0, 255), -1, Name); } if (Name == "test") { Beep(600,300); } /* if(key[KEY_UP]) { ship_y --; } if(key[KEY_DOWN]) { ship_y ++; } if(key[KEY_LEFT]) { ship_x --; } if(key[KEY_RIGHT]) { ship_x ++; } */ } } void Eingabe(FONT* myfont, char *Schreib1, int x, int y, int Schriftfarbe, int Hintergrund, char *Ausgabe) { int val, i, anz; char Eingabestring[1024]={""}; char Schreib[1024]; sprintf(Schreib,"%s",Schreib1); while( !key[KEY_ENTER]) { textout_ex(screen, myfont, Schreib, x, y, Schriftfarbe, Hintergrund); val = readkey(); if ((val >> 8) != KEY_ENTER && (val >> 8) != KEY_ESC) { anz=strlen(Eingabestring); if ((val >> 8) == KEY_BACKSPACE) { Eingabestring[anz-1]='\0'; clear_bitmap(screen); } else if ((val >> 8) == KEY_TAB) { for(i=0;i<9;i++) Eingabestring[anz+i]=' '; Eingabestring[anz+i]='\0'; } else { Eingabestring[anz]=(char)(val & 0xff); Eingabestring[anz+1]='\0'; } } textout_ex(screen, myfont, Eingabestring, x+text_length(myfont,Schreib), y, Schriftfarbe, Hintergrund); } sprintf(Ausgabe,"%s",Eingabestring); }
und alles mal wieder in allegro 4.2.2 , weil ich mit dev c++ arbeite und allgro 5.0 nicht downloadbar ist in der upgrade liste (..ist nen anderes thema)
were trotzdem dankbar für hilfe
-
@all !!!
die text eingabe hab ich von c-programmieren.com aber viele samples funktionieren aufgrund falscher header,grosskleinschreibfehler und libs nicht
genau wie mit der sprint geschichte -.-
-
Hallo,
also hab nur mal kurz rüber geguckt, schau dir mal Zeile 166 an.
clear_bitmap(screen);
Also sieht sehr verdächtig aus und deshalb wird der Screen schwarz, da er gelöscht wird
Gruß Christopher
-
ja und bei buffer passirt nichts weil nur die start_game dopple buffer hat
-
habs hinbekommen !!!
so gehtsvoid start_game() { string edittext; string::iterator iter = edittext.begin(); // string iterator int caret = 0; // tracks the text caret int print_me = 0; bool insert = true; // true if text should be inserted while(!key[KEY_ESC]) { clear(buffer); draw_sprite(buffer,back1,0,0); draw_sprite(buffer,inventar,0,0); draw_sprite(buffer,ship_off,ship_x,ship_y); /////////////////////////////////////////////////////// if(key[KEY_C]) { print_me = 1; } if(print_me == 1) { while(keypressed()) { int newkey = readkey(); char ASCII = newkey & 0xff; char scancode = newkey >> 8; if(ASCII >= 32 && ASCII <= 126) { if(insert || iter == edittext.end()) iter = edittext.insert(iter, ASCII); else edittext.replace(caret,1,1, ASCII); caret++; iter++; } else switch(scancode) { case KEY_DEL: if(iter != edittext.end()) iter = edittext.erase(iter); break; case KEY_BACKSPACE: if(iter != edittext.begin()) { caret--; iter--; iter = edittext.erase(iter); } break; case KEY_INSERT: insert = !insert; break; default: break; } } textout(buffer, font,edittext.c_str(),575,530, WHITE); } blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); ///////////////////////////////////////////////////////// } }
-
upps ... es fehlt noch: [cpp]#include <string>[cpp]
-
jetzt muss ich nur noch wissen wie die ausgabe mit enter wieder beendet und
das was man geschrieben hat abfragtso in etwa
if (eingeben == "test") { Beep(600,300); }
kann mir jemand helfen ???