私は libtcod と c を使用していますが、移動関数が入力に応答しません。呼び出されたときの関数の外観は次のとおりです。
TCOD_key_t key;
move_entity(player.x, player.y, key);
ここに実際のソースコードがあります
void move_entity(int x, int y, TCOD_key_t key){
TCOD_sys_check_for_event(TCOD_EVENT_KEY_PRESS, &key, NULL);
switch(key.vk){
case TCODK_UP : y--; break;
case TCODK_DOWN : y++; break;
case TCODK_RIGHT : x++; break;
case TCODK_LEFT : x--; break;
default:break;
}
}
不思議なことに、move_entity 内のコードがメイン関数にコピーされると、プログラムが応答します。メイン ループはそのままです。
#include "libtcod.h"
#include "move.h"
#include "entity.h"
int main(){
struct Entity player = {40, 25, '@', 100, TCOD_COLOR_LIME};
struct Entity enemy = {20, 35, '&', 50, TCOD_COLOR_RED};
TCOD_console_set_custom_font("terminal12x12_gs_ro.png", TCOD_FONT_LAYOUT_ASCII_INROW, 16, 16);
TCOD_console_init_root(80, 50, "Placeholder title", false, TCOD_RENDERER_SDL);
while(!TCOD_console_is_window_closed()){
TCOD_key_t key;
move_entity(player.x, player.y, key);
TCOD_console_clear(NULL);
TCOD_console_print(NULL, 1, 1, "Player Health:%d", player.health);
TCOD_console_print(NULL, 1, 2, "Enemy Health:%d", enemy.health);
entity_render(player.x, player.y, player.ch, player.forcol);
entity_render(enemy.x, enemy.y, enemy.ch, enemy.forcol);
TCOD_console_flush(NULL);
}
return 0;
}
私が見落としていたばかげたものだと確信していますが、本当に私をスピンさせてくれました。助けに感謝します:)
*販売者のアドバイスを編集 ここに私の編集したコードがあります
メインループで呼び出されるコード
move_entity(&player.x, &player.y);
そして、関数内のコード
void move_entity(int *x, int *y){
TCOD_key_t key;
TCOD_sys_wait_for_event(TCOD_EVENT_KEY_PRESS, &key, NULL, false);
switch(key.vk){
case TCODK_UP : *y--; break;
case TCODK_DOWN : *y++; break;
case TCODK_RIGHT : *x++; break;
case TCODK_LEFT : *x--; break;
default:break;
}
}