gpt4 book ai didi

c++ - 如何在一个屏幕中使用两个缓冲区?是否可以 ? (快板.h)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:51:38 25 4
gpt4 key购买 nike

我正在使用 Microsoft Visual Studio 2010,尝试使用 Allegro.h 库编写游戏代码。

重点是

  1. 我使用缓冲区通过 draw_sprite(screen,buf1,0,0) 绘制建筑物;
  2. 然后我想在那个屏幕上移动一个位图球图像
  3. 当我移动 .bmp 图像时,我再次使用 buf1(相同的缓冲区)但我应该清理 buf1 以创建移动图像
  4. 当我这样做时,我自然会错过缓冲区中的所有内容,但我希望在游戏过程中有建筑背景。
  5. 如何在一个屏幕中使用两个缓冲区?

这是我的代码:

void  BinaCizdir1(BITMAP *buf1){
int r;
int renk;
int say=0;
BITMAP *turuncu_beton=load_bitmap("turuncu.bmp",NULL);
BITMAP *sari_beton=load_bitmap("sari.bmp",NULL);
BITMAP *pembe_beton=load_bitmap("pink.bmp",NULL);
BITMAP *oyunu1_resmi=load_bitmap("topbu.bmp",NULL);

//Birinci oyuncunun x koordinatını belirledik.Random olarak!
int oyuncu1_y_koor=0;

int oyuncu1_x_koor1= (1+rand()%4);
if (oyuncu1_x_koor1==1){
oyuncu1_x_koor1=30;
}
if (oyuncu1_x_koor1==2){
oyuncu1_x_koor1=150;
}if (oyuncu1_x_koor1==3){
oyuncu1_x_koor1=270;
}if (oyuncu1_x_koor1==4){
oyuncu1_x_koor1=390;
}


if(kontrol==0){
renk=(rand()%3);r= (1+rand()%6)*30;
for(int x=0;x<1080;x=x+30){
for(int y=600;y>450-r;y=y-30){
if(oyuncu1_x_koor1==x){
oyuncu1_y_koor=390-r;
draw_sprite(buf1,oyunu1_resmi,oyuncu1_x_koor1,oyuncu1_y_koor);
}
if(renk==0){
draw_sprite(buf1,turuncu_beton,x,y);
}
if(renk==1){
draw_sprite(buf1,sari_beton,x,y);
}
if(renk==2){
draw_sprite(buf1,pembe_beton,x,y);
}
}
if( say%3==2 && x!=1020){
renk=(rand()%3);
r= (1+rand()%6)*30;
x=x+30;
}
say++;
/*
velocityY = velocityY +acc*dt; // updating the y component of the velocity
x = x + (velocityX*dt); // updating the x position
y = y + (velocityY*dt) + 0.5*acc*(dt*dt);// updating the y position.
rest(5);
draw_sprite(buf1,oyunu1_resmi,x,y);
*/
}
kontrol=1;
}
draw_sprite(screen,buf1,0,0);
}

这是我的动态bmp图片代码:

  velocityY = velocityY +acc*dt; // updating the y component of the velocity  
x = x + (velocityX*dt); // updating the x position
y = y + (velocityY*dt) + 0.5*acc*(dt*dt);// updating the y position.
rest(5);
draw_sprite(buf1,oyunu1_resmi,x,y);

最佳答案

对不起,我不太明白这个说法;听起来你在问双缓冲。

您会将建筑物绘制到屏幕外帧缓冲区上。然后你将你的球绘制到屏幕外帧缓冲区上。然后您将等待屏幕的垂直刷新。 (这一步很可能由 Allegro 自动完成)然后你将交换缓冲区,使屏幕外的帧缓冲区成为屏幕上的。(重复)

比照。 https://wiki.allegro.cc/index.php?title=Double_buffering

关于c++ - 如何在一个屏幕中使用两个缓冲区?是否可以 ? (快板.h),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27623472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com