这就是我通过按下按钮来移动矩形的方法:
#include <stdio.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_native_dialog.h>
#include <allegro5/allegro_primitives.h>
#define ScreenWidth 1440
#define ScreenHeight 790
int main()
{
if (!al_init())
{
al_show_native_message_box(NULL, NULL, NULL, "Could not initialize Allegro 5", NULL, NULL);
return -1;
}
al_set_new_display_flags(ALLEGRO_WINDOWED);
ALLEGRO_DISPLAY *display = al_create_display(ScreenWidth, ScreenHeight);
al_set_window_position(display, 0, 0);
al_set_window_title(display, "Lab 14");
if (!display)
{
al_show_native_message_box(display, "Error", NULL, "Display window was not created succesfully", NULL, ALLEGRO_MESSAGEBOX_ERROR);
return -1;
}
al_init_primitives_addon();
al_install_keyboard();
ALLEGRO_COLOR orange = al_map_rgb(255, 160, 0);
ALLEGRO_EVENT_QUEUE *event_queue = al_create_event_queue();
al_register_event_source(event_queue, al_get_keyboard_event_source());
bool done = false;
int x = 10, y = 10;
int moveSpeed = 5;
int state = NULL;
while (!done)
{
ALLEGRO_EVENT events;
al_wait_for_event(event_queue, &events);
if(events.type = ALLEGRO_EVENT_KEY_DOWN)
{
switch(events.keyboard.keycode)
{
case ALLEGRO_KEY_DOWN:
y += moveSpeed;
break;
case ALLEGRO_KEY_UP:
y -= moveSpeed;
break;
case ALLEGRO_KEY_RIGHT:
x += moveSpeed;
break;
case ALLEGRO_KEY_LEFT:
x -= moveSpeed;
break;
case ALLEGRO_KEY_ESCAPE:
done = true;
break;
}
}
al_draw_rectangle(x, y, x + 20, y + 20, orange, 2.0);
al_flip_display();
al_clear_to_color(al_map_rgb(0, 0, 0));
}
al_draw_rectangle(300, 600, 500, 200, orange, 2.0);
al_destroy_display(display);
al_destroy_event_queue(event_queue);
return 0;
}
如何修改代码以使矩形在出现在另一侧时平滑地穿过显示边框?平滑地意味着它不应该完全出现在另一侧。
答案 0 :(得分:1)
您拥有屏幕尺寸以及矩形的位置和大小,因此您知道它将被截断多少屏幕
你必须先检查每个矩形,然后再将它们显示到屏幕上
如果您检测到切割,只需计算多少,并在屏幕另一侧的位移坐标上为同一个矩形调用另一个blit,这样只是矩形的一部分。是可见的。
在你的代码中
al_draw_rectangle(x, y, x + 20, y + 20, orange, 2.0);
如果矩形(部分)在屏幕外,则添加另一个具有不同坐标的调用。