You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

复刻Space Invaders时,Invader Sprite无法横向排列的技术问题

解决Space Invaders中外星人精灵重叠的问题

嘿,我一眼就看到你代码里的关键问题了,先帮你拆解清楚:

首先看你给外星人X坐标赋值的逻辑——invaderArmy[index].xPos *= index;,结合结构体默认xPos=100的设定,咱们算一下每个外星人的实际X位置:

  • index=0:100 * 0 = 0
  • index=1:100 * 1 = 100
  • index=2:100 * 2 = 200
    ...

这本身就不符合横向排列的需求,更别说如果你的Draw_And_Rotate_Sprite函数没正确用你传的X参数,那肯定会重叠。下面给你具体的修正方案:

第一步:修正X坐标的计算逻辑

你应该让每个外星人从指定起始位置开始,依次拉开「自身宽度+额外间距」的距离,确保不会重叠。比如:

// 起始X坐标,可根据你的游戏界面调整
int startX = 100;
// 外星人之间的空隙,按需调整
int gap = 20;

for (int index = 0; index < 5; index++) {
    // 核心:起始位置 + 索引*(宽度+间距)
    invaderArmy[index].xPos = startX + index * (invaderArmy[index].width + gap);
    // 注意:如果Draw函数需要Y坐标,记得也要传进去(你的原代码只传了X)
    Draw_And_Rotate_Sprite(invaderImage, invaderArmy[index].xPos, invaderArmy[index].yPos);
}

第二步:排查绘制函数的问题

你说调试时X坐标已经修改,但精灵还是重叠,很大概率是Draw_And_Rotate_Sprite没正确使用你传入的X参数!比如函数内部硬编码了固定X值,或者参数接收逻辑有问题。一定要检查函数实现:

// 举个反例:如果函数是这样写的,传X也没用
void Draw_And_Rotate_Sprite(LPDIRECT3DTEXTURE9 img, int x = 100) {
    // 绘制时误用了默认值100,而非传入的x参数
}

顺带优化结构体初始化

你的构造函数里xPos; yPos;这两行完全没用,建议改成初始化列表的方式,避免出现未定义的随机值:

struct INVADER { 
    int xPos; 
    int yPos; 
    int width; 
    int height; 
    D3DCOLOR color; 
    // 明确初始化所有字段
    INVADER() : xPos(100), yPos(50), width(64), height(64), color(D3DCOLOR_XRGB(255, 255, 255)) {} 
};

内容的提问来源于stack exchange,提问作者Patrick_Mc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:37:20