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

Processing开发2D游戏窗口向左倾斜偏移问题求助

解决Processing游戏画面偏移、裁切问题

你遇到的画面向左倾斜、右侧留白、左侧内容裁切的问题确实由代码逻辑导致,核心原因是rectMode(CENTER)的设置与矩形绘制的坐标逻辑不匹配:

当启用rectMode(CENTER)后,rect()函数的前两个参数代表矩形的中心坐标,但你的代码中计算坐标时使用的是kockaWidth * i、kockaHeight * j这类左上角坐标的逻辑,导致所有矩形整体向左上偏移了半个矩形的尺寸,最终出现画面偏移和裁切的现象。

以下是两种可行的解决方法:

方案一:移除rectMode(CENTER)设置

直接删除setup()中的rectMode(CENTER);语句,让rect()函数默认使用左上角坐标模式,与当前的坐标计算逻辑匹配,即可让网格铺满整个窗口。

修改后的setup()代码:

void setup() {
  size(300, 300);
  for(int i = 0; i < red; i++)
  {
    for(int j = 0; j < kolona; j++)
    {
      if(random(100) < 20 && j != 50 && i != 20)
      {
        grid[i][j] = true;
      }
    }
  }
  // 移除rectMode(CENTER)设置
}

方案二:调整坐标适配CENTER模式

如果需要保留rectMode(CENTER),则需要将每个矩形的坐标调整为中心位置,即在原坐标基础上加上半个矩形的宽高,玩家坐标也需要同步调整:

修改后的draw()核心代码:

void draw() {
  int kockaWidth = width/red;
  int kockaHeight = height/kolona;
  for(int i = 0; i < red; i++)
  {
    for(int j = 0; j < kolona; j++)
    {
      float rectCenterX = kockaWidth * i + kockaWidth/2;
      float rectCenterY = kockaHeight * j + kockaHeight/2;
      if(grid[i][j])
      {
        fill(255,0,0);
        rect(rectCenterX, rectCenterY, kockaWidth,kockaHeight);
      }
      else
      {
       stroke(1);
       fill(160,160,160);
       rect(rectCenterX, rectCenterY, kockaWidth,kockaHeight);
      }
    }
  }
  float playerPixelX = playerIndexX * kockaWidth + kockaWidth/2;
  float playerPixelY = playerIndexY * kockaHeight + kockaHeight/2;
  fill(0, 255, 0);
  rect(playerPixelX, playerPixelY, kockaWidth, kockaHeight);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:05:29