繁体   English   中英

C ++ Allegro绘图精灵(即使没有任何循环)也会降低图形速度

[英]C++ Allegro Drawing Sprites (even without any loop) Slows Graphics Down

我正在使用Allegro和C ++开发2D平台游戏。 但是,有一个问题。 在游戏中,角色有橡皮子弹,当子弹发射时,它会永远从墙壁上反射出来。 角色可以发射30枚子弹,但是,子弹数越多,图形变得越慢。 尽管我不使用任何循环来绘制子弹的运动,但游戏速度不可避免地会变慢。 这是移动子弹的功能:

void Character :: moveBullets(void){
if(bullet_turn != bullet_count){
    bullet_chain[bullet_turn++]->move();        
else
    bullet_turn = 0;}

这是函数move():

rectfill(buffer, getX(), getY(), getX() + bullet_image[direction]->h, getY() + bullet_image[direction]->w, 0);

//update direction 

acquire_screen();
draw_sprite(buffer, bullet_image[direction], x, y);
blit(buffer, screen, 0, 0, 0, 0, buffer->w, buffer->h);
release_screen();

}

我该怎么办? 绘制许多精灵时,Allegro是否总是放慢速度?

如果我正确地理解了您的代码,那么您正在将整个屏幕从缓冲区复制到每个项目符号的屏幕。 这真的是您想要的吗?

另外,您确定应该使用acquire_screen()吗? Acquisition_bitmap的文档

https://www.allegro.cc/manual/4/api/bitmap-objects/acquire_bitmap

说在某些情况下会导致速度下降。

根据acquire_screen调用的acquired_bitmap文档,您应该最大程度地减少调用次数。 通常,这意味着在更新过程开始时调用它,然后在释放锁之前执行所有绘图。

...大多数绘图功能需要在绘制视频位图之前将其锁定。 但是这样做的速度非常慢,因此,如果在主重绘功能开始时仅获取一次屏幕,然后调用多个需要锁定位图的绘制操作,并且仅在完成后释放它,您将获得更好的性能。

从当前的示例代码无法得知,但我怀疑moveBullets被多次调用了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM