blondnot 2014-03-22 07:25 采纳率: 0%
浏览 963

MFC 横版 怎么使得怪物跟着地图滚动消失。

自己控制一个hero 然后人物走动会使得地图滚动,然后在屏幕上的怪物也随着地图的滚动而消失。就比如赛车超车了 被超的会落后到屏幕后面不见。贴上代码

lass Hero{

public:
int hero_x,hero_y,hero_vx,hero_vy,move_face,hero_face,step ;

Hero();
void run();

};
class Enemy{
public:

int enemy_x,enemy_y,enemy_vx,enemy_vy,face,step,life,lenght;
Enemy();
void enemy_move();
};
class Rollback
{
public: int rollback_x,rollback_vx;

    Rollback();
    void roll();

};
Hero Jianxiake;
Enemy Enemy[4];
Rollback rollback;
/////////////////////////////////////// 人物的动作 /////////////////////////////////////////////////
Hero::Hero()
{
hero_x=210,hero_y=370,hero_vy=0,hero_vx=0,hero_face=0;

}

void Hero::run()
{
hero_x=hero_x+hero_vx;
hero_y=hero_y+hero_vy;
step++;

if (hero_vy==0&&hero_vx==0)
{

  BufDC.TransparentBlt(hero_x,hero_y,56,91,&ManDC,(step%7)*56,hero_face*91,56,91,0x000000); 

}

else
BufDC.TransparentBlt(hero_x,hero_y,67,91,&MoveDC,(step%7)*67,move_face*91,67,91,0x000000);
}
///////////////////////////////////////人物动作////////////////////////////////////////////////////

//////////////////////////////////////背景滚动//////////////////////////////////////////////////////
Rollback::Rollback(){

rollback_x=0,rollback_vx=0;

}

void Rollback::roll()
{
rollback_x=rollback_x+rollback_vx;

if(Jianxiake.hero_x+67>400)
{
   Jianxiake.hero_vx=0;

   rollback_vx=10;
}
 BufDC.BitBlt(0,0,1024,760,&BackDC,rollback_x,0,SRCCOPY);

}
//////////////////////////////////////////////背景滚动////////////////////////////////////////////////////

//////////////////////////////////////怪物动作////////////////////////////////////////////////////
Enemy ::Enemy(){
enemy_x=600,enemy_y=370;
lenght=3;
life=1;
face=rand()%4;
switch(face)
{
case 0:
enemy_vx=lenght;
enemy_vy=0;
break;
case 1:
enemy_vx=-lenght;
enemy_vy=0;
break;
case 2:
enemy_vx=lenght;
enemy_vy=-lenght;
break;
case 3:
enemy_vy=-lenght;
enemy_vx=-lenght;
break;

  }

}
void Enemy::enemy_move(){
enemy_x+=enemy_vx;
enemy_y+=enemy_vy;
int q;

if (enemy_x<0)
{
    enemy_vx=lenght;
    //srand(time(0));
    q=rand()%3;
    switch(q)
    {
    case 0: 
        enemy_vy=-lenght;
        face=2;
        break;
    case 1:
        enemy_vy=lenght;
        face=0;
        break;
    case 2:
        enemy_vy=0;
        face=0;
        break;

    }
}
if (enemy_x>900-20)
{
    enemy_vx=-lenght;
    //srand(time(0));

    q= rand()%3;
    switch(q)
    {

    case 0:
        enemy_vy=-lenght;
        face=3;
        break;
    case 1:
        enemy_vy=lenght;
        face=1;
        break;
    case 2:
        enemy_vy=0;
        face=1;
        break;

    }
}
if (enemy_y>500)
{
    enemy_vy=-lenght;
    //srand(time(0));

    q= rand()%3;
    switch(q)
    {
    case 0:
        enemy_vx=-lenght;
        face=3;
        break;
    case 1:
        enemy_vx=lenght;
        face=2;
        break;
    case 2:
        enemy_vx=0;
        face=2;
        break;

    }
}

if (enemy_y<240)
{
    enemy_vy=lenght;
    //srand(time(0));

    q= rand()%3;
    switch(q)
    {
    case 0:
        enemy_vx=-lenght;
        face=1;
        break;
    case 1:
        enemy_vx=lenght;
        face=0;
        break;
    case 2:
        enemy_vx=0;
        face=0;
        break;

    }
}

        step++;
       BufDC.TransparentBlt(enemy_x+rollback.rollback_vx,enemy_y,204,176,&EnemyDC,(step%4)*204,face*176,204,176,0xffffff); 

}

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-05-26 22:34
    关注

    该回答引用ChatGPT-3.5

    要实现怪物跟着地图滚动消失的效果,你可以在每次绘制怪物的时候,判断怪物是否在屏幕范围内。如果怪物超出屏幕范围,则不绘制该怪物。


    在你的代码中,可以在Enemy::enemy_move()函数中添加以下逻辑来实现该效果:

    void Enemy::enemy_move() {
        enemy_x += enemy_vx;
        enemy_y += enemy_vy;
        int q;
    
        // 判断怪物是否在屏幕范围内
        if (enemy_x + rollback.rollback_vx < -204 || enemy_x + rollback.rollback_vx > 1024 || enemy_y < 0 || enemy_y > 760) {
            return;  // 不绘制该怪物
        }
    
        // 绘制怪物
        step++;
        BufDC.TransparentBlt(enemy_x + rollback.rollback_vx, enemy_y, 204, 176, &EnemyDC, (step % 4) * 204, face * 176, 204, 176, 0xffffff);
    }
    

    在这段代码中,我们通过判断怪物的位置是否超出屏幕范围来决定是否绘制怪物。如果怪物的x坐标加上地图滚动的偏移量小于-204或大于1024,或者怪物的y坐标小于0或大于760,就不进行绘制。


    这样,当地图滚动时,超出屏幕范围的怪物就会消失了。记得在其他地方调用Enemy::enemy_move()来更新怪物的位置和绘制。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题