Processing 基于鼠标位置的运动图像轨迹和方向运动处理

Processing 基于鼠标位置的运动图像轨迹和方向运动处理,processing,Processing,因此,我设法做了大部分练习,但想不出一种方法来跟踪运动图像。此外,在视频中,球沿鼠标位置的方向移动 然而,当我尝试这样做时,鼠标位置每次都在变化,球在移动时跟随鼠标。必须使用鼠标位置计算速度。任何帮助都将不胜感激 它应该是这样的: 我的代码: PImage球,bFire; int xPosB、yPosB、bW、bH、bFW、bFH、velocityX、velocityY; 布尔b移动; 无效设置(){ 大小(1024512); //加载图像 ball=loadImage(“ball.png”);

因此,我设法做了大部分练习,但想不出一种方法来跟踪运动图像。此外,在视频中,球沿鼠标位置的方向移动

然而,当我尝试这样做时,鼠标位置每次都在变化,球在移动时跟随鼠标。必须使用鼠标位置计算速度。任何帮助都将不胜感激

它应该是这样的:

我的代码:

PImage球,bFire;
int xPosB、yPosB、bW、bH、bFW、bFH、velocityX、velocityY;
布尔b移动;
无效设置(){
大小(1024512);
//加载图像
ball=loadImage(“ball.png”);
bFire=loadImage(“ballFire.png”);
//调整图像大小
ball.resize(ball.width/4,ball.height/4);
bFire.resize(bFire.width/4,bFire.height/4);
//起始值
//球
xPosB=宽度/2;
yPosB=高度/2;
}
作废提款(){
背景(0);
//抽签
图像模式(中心);
图像(ball、xPosB、yPosB);
//抽火球
如果(b移动){
图像(bFire、xPosB、yPosB);
xPosB+=velocityX;
yPosB+=velocityY;
}
//结肠炎检测
如果(xPosB-bFire.width/2=宽度){
速度x*=-1;
}否则如果(yPosB-bFire.height/2=高度){
速度y*=-1;
}
}
void mousePressed(){
如果(鼠标按钮==左){
b移动=!b移动;
velocityX=mouseX/100;
velocityY=mouseY/100;
}
}

我不能再提出你所描述的问题——球跟在鼠标后面

void mousePressed() {
  if (mouseButton == LEFT) {
    bMoving=!bMoving;
    velocityX = (mouseX - xPosB) / 50;
    velocityY = (mouseY - yPosB) / 50;
  }
我可以告诉您,您使用的
mousepressed()
不正确。
指定速度,但由于mouseX和mouseY始终为正值,因此球始终向右和向下移动

尝试下面的代码,它将速度设置为鼠标和球的当前位置之间的差。现在球将始终朝鼠标移动

void mousePressed() {
  if (mouseButton == LEFT) {
    bMoving=!bMoving;
    velocityX = (mouseX - xPosB) / 50;
    velocityY = (mouseY - yPosB) / 50;
  }
第二点:我不知道你的ballFire.png看起来如何,但现在它是在球的完全相同的X/Y位置绘制的。这不能给你一个拖尾效果,因为你必须把火球拉到球后面一点

请尝试以下代码:

//draw fire ball
  if (bMoving) {
    image(bFire, xPosB-velocityX, yPosB-velocityY);
    xPosB+=velocityX;
    yPosB+=velocityY;
  }

  //draw ball
  imageMode(CENTER);
  image(ball, xPosB, yPosB);
它根据速度在球后面绘制火球。所以越快意味着距离越远。当然,你可以调整这个距离。如果希望多个Firball作为尾随效果,请使用不同的偏移多次绘制火球


最后一点注意:您需要最后绘制球,否则火球将被绘制为普通球的一半。

火球必须替换基本球,并留下一条看起来像火球图像模糊版本的轨迹。这些是balls的照片:ibb.co/tJ687xk ibb.co/fkpXv46