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

Processing实现可全屏移动的白色云朵图形技术问询

Processing实现可移动云朵的解决方案

核心思路

原来的云朵用固定坐标绘制,要实现整体移动,需要把所有圆的坐标改为基于一个基准位置的相对坐标,通过修改基准位置的变量,就能让整个云朵同步移动。

基础代码框架

首先定义全局变量存储云朵的基准位置(以中间圆的坐标为基准),并在初始化时设置全屏:

float cloudX;
float cloudY;
color whiteCloud = #FFFFFF;
float moveSpeed = 5; // 移动速度,按需调整

void setup() {
  fullScreen(); // 启用全屏模式
  cloudX = width / 2; // 初始位置设为屏幕中央
  cloudY = height / 2;
}

在draw()中,通过基准位置加相对偏移绘制云朵:

void draw() {
  background(135, 206, 235); // 设置天空蓝背景,便于观察云朵
  stroke(whiteCloud);
  fill(whiteCloud);
  
  // 基于基准位置绘制云朵(三个圆的相对位置保持不变)
  circle(cloudX - 40, cloudY, 60);
  circle(cloudX, cloudY, 80);
  circle(cloudX + 40, cloudY, 60);
}

可选移动方案

方案1:键盘控制移动

通过方向键控制云朵上下左右移动,同时限制云朵在屏幕范围内(避免完全移出视野):
在draw()中添加键盘检测逻辑:

void draw() {
  background(135, 206, 235);
  stroke(whiteCloud);
  fill(whiteCloud);

  // 键盘控制逻辑
  if (keyPressed) {
    // 上移:确保云朵顶部不超出屏幕
    if (keyCode == UP && cloudY > 40) {
      cloudY -= moveSpeed;
    }
    // 下移:确保云朵底部不超出屏幕
    else if (keyCode == DOWN && cloudY < height - 40) {
      cloudY += moveSpeed;
    }
    // 左移:确保云朵左侧不超出屏幕
    else if (keyCode == LEFT && cloudX > 70) {
      cloudX -= moveSpeed;
    }
    // 右移:确保云朵右侧不超出屏幕
    else if (keyCode == RIGHT && cloudX < width - 70) {
      cloudX += moveSpeed;
    }
  }

  // 绘制云朵
  circle(cloudX - 40, cloudY, 60);
  circle(cloudX, cloudY, 80);
  circle(cloudX + 40, cloudY, 60);
}

方案2:自动循环移动(左右往返)

让云朵从屏幕左侧自动移动到右侧,完全移出后重置到左侧,实现循环:
修改draw()中的位置更新逻辑:

void draw() {
  background(135, 206, 235);
  stroke(whiteCloud);
  fill(whiteCloud);

  // 自动右移,超出屏幕右侧后重置到左侧外
  cloudX += 2;
  if (cloudX > width + 70) {
    cloudX = -70;
  }

  // 绘制云朵
  circle(cloudX - 40, cloudY, 60);
  circle(cloudX, cloudY, 80);
  circle(cloudX + 40, cloudY, 60);
}

方案3:平滑跟随鼠标(优化生硬绑定)

如果想要跟随鼠标但避免瞬移感,用缓动算法实现平滑移动:
修改draw()中的位置更新逻辑:

void draw() {
  background(135, 206, 235);
  stroke(whiteCloud);
  fill(whiteCloud);

  // 缓动跟随鼠标,easing系数越小越平滑(取值0.01~0.1)
  float easing = 0.05;
  cloudX += (mouseX - cloudX) * easing;
  cloudY += (mouseY - cloudY) * easing;

  // 绘制云朵
  circle(cloudX - 40, cloudY, 60);
  circle(cloudX, cloudY, 80);
  circle(cloudX + 40, cloudY, 60);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:14:53