越野车弹跳球

2024-02-11

我在处理中制作碰撞球草图时,遇到了一个奇怪的错误。尽管有从墙上弹起的条件,有些球粘在上面。我在这里找不到错误的根源。有人可以帮忙吗?我还意识到可能很少(很多)糟糕的编码实践,但我事先道歉。

我在下面发布代码。

1)主要:https://pastebin.com/hv0H14gZ https://pastebin.com/hv0H14gZ

particle[] elec = new particle[5];

boolean record = false;

void setup(){
  float x=0,y=0;
  int i,j;
  float diam = 100;

  size(800,400);

  //Initialising the particle objects
  for (int k = 0; k < elec.length; k++){
    x = random(width/10, width/1.2);
    y = random(height/10, height/1.2);
    elec[k] = new particle(x,y);
  }

  //Spawning at random places
  for ( i = 0; i < elec.length; i++){

   if (i!=0){

     for (  j = 0; j < elec.length; j ++){

       if (dist(x,y,elec[j].getX(),elec[j].getY()) <= diam){
         x = random(width/10, width/1.2);
         y = random(height/10, height/1.2);
         j = -1;
       }
     }
  }

    elec[i] = new particle(x,y,diam,4,4,2);


  }


}
void draw(){
  background(0);

  for (int i = 0; i < elec.length; i++){
    elec[i].update(elec);
    elec[i].move();
    elec[i].bounce();
    if(record){
      saveFrame("collide_#####.png");
      fill(255,0,0);
    } else {
      fill(0,255,0);
    }

    ellipse(width/1.01, height/1.01,5,5);
  }

}

void keyPressed(){
  if (key =='r' || key =='R'){
    record = !record;
  }
}

2)课程:https://pastebin.com/Rt49sN9c https://pastebin.com/Rt49sN9c

public class velocity{
  float delx, dely;

  //Constructor 1 
  public velocity(){}

  //Constructor 2
  public velocity(float delx, float dely){
    this.delx = delx;
    this.dely = dely;
  }

  //Mutators for xvelocity and y velocity
  public float getdelx(){
    return this.delx;
  }

  public float getdely(){
    return this.dely;
  }

  //Accessors for xvelocity and y velocity
  public void setdelx(float delx){
    this.delx = delx;
  }

  public void setdely(float dely){
    this.dely = dely;
  }

}






public class particle{

  private float xpos , ypos, delx , dely,size, decay, mass;
  color colour;

  //constructor 1
  public particle(float x, float y){
  this.xpos = x;
  this.ypos = y;
  }

  //constructor 2
  public particle(float xpos, float ypos, float size, float delx, float dely, float mass){
    this.xpos = xpos;
    this.ypos = ypos;
    this.size = size;
    this.delx = delx;
    this.dely = dely;
    this.mass = mass;

  }

  //Mutators for size, x velocity y velocity and velocity vector
  public void setsize(float size){
    this.size = size;
  }

  public void setDX(float delx){
    this.delx = delx;
  }

  public void setDY(float dely){
    this.dely = dely;
  }




  //Accessors for size, x position, y position, x velocity and y velocity

  public float getsize(){
    return this.size;
  }

  public float getX(){
    return this.xpos;
  }

  public float getY(){
    return this.ypos;
  }

  public float getDX(){
    return this.delx;
  }

  public float getDY(){
    return this.dely;
  }

  public float getmass(){
    return this.mass;
  }

  public velocity getvel(){

    velocity v = new velocity(this.getDX(), this.getDY());
    return v;
  }



  //Functionality. Moving around, Bouncing off of walls, and basic display updates
  public void move(){
    this.xpos += this.delx;
    this.ypos += this.dely;
  }

  public void bounce(){
    if((this.xpos - this.size/2.0) < 0 || (this.xpos + this.size/2.0) > width){
      this.setDX(this.getDX()*-1);
    }
    if((this.ypos - this.size/2.0) < 0 || (this.ypos + this.size/2.0) > height){
       this.setDY(this.getDY()*-1);
    }
  }

  public void update(particle[] elec){

    for(int i =0; i< elec.length; i++){

      if(this == elec[i]) continue;
      if(dist(this.getX(),this.getY(),elec[i].getX(),elec[i].getY()) - this.getsize() <0){
        collision(this, elec[i]);
        //println(dist(this.getX(),this.getY(),elec[i].getX(),elec[i].getY()) - this.getsize()/2);
      }
    }
    display();
  }

  public void display(){
    stroke(0);
    fill(119,240,153);   
    ellipse(this.xpos, this.ypos, this.size ,this.size);
  }
}



velocity rotate(velocity v, float angle){
  float x = v.getdelx()*cos(angle) - v.getdely()*sin(angle);
  float y = v.getdelx()*sin(angle) + v.getdely()*cos(angle);

  velocity vel = new velocity(x,y);
  return vel;
}



void collision(particle p1, particle p2){

  float xveldiff = p1.getDX()-p2.getDX();
  float yveldiff = p1.getDY()-p2.getDY();

  float xdist = p2.getX() - p1.getX();
  float ydist = p2.getY() - p1.getY();

  //Check for accidental overlaps of particles
  if(xveldiff*xdist + yveldiff*ydist > 0){

    float angle = -atan2(p2.getY() - p1.getY(), p2.getX() - p1.getY());

    float m1 = p1.getmass();
    float m2 = p2.getmass();

    velocity u1 = rotate(p1.getvel(),angle);
    velocity u2 = rotate(p2.getvel(),angle);

    velocity v1 = new velocity(u1.getdelx() * (m1 - m2) / (m1 + m2) + u2.getdelx() * 2 * m2 / (m1 + m2), u1.getdely());
    velocity v2 = new velocity(u2.getdelx() * (m1 - m2) / (m1 + m2) + u1.getdelx() * 2 * m2 / (m1 + m2), u2.getdely());

    velocity vf1 = rotate(v1, -angle);
    velocity vf2 = rotate(v2, -angle);

    p1.setDX(vf1.getdelx());
    p1.setDY(vf1.getdely());

    p2.setDX(vf2.getdelx());
    p2.setDY(vf2.getdely());
  }

}

动画不错,问题是方法造成的bounce班级的particle:

当“球”一步没有离开墙壁时,它就会粘住。
请注意,如果例如条件(this.xpos - this.size/2.0) < 0满足两次,方向反转两次(this.getDX()*-1)。这会导致球不断弹入墙壁并导致沿着墙壁的颤抖运动。

 public void bounce(){

     if((this.xpos - this.size/2.0) < 0 || (this.xpos + this.size/2.0) > width){
         this.setDX(this.getDX()*-1);
     }
     if((this.ypos - this.size/2.0) < 0 || (this.ypos + this.size/2.0) > height){
         this.setDY(this.getDY()*-1);
     }
 }

你必须确保方向(delx, dely) 总是指向远离墙壁的方向,如果球离墙壁太近的话:

public void bounce(){

    if( this.xpos - this.size/2.0 < 0 ) {
        this.setDX( Math.abs(this.getDX()) );
    } else if( this.xpos + this.size/2.0 > width ) {
        this.setDX( -Math.abs(this.getDX()) );
    }

    if( this.ypos - this.size/2.0 < 0 ) {
        this.setDY( Math.abs(this.getDY()) );
    } else if( this.ypos + this.size/2.0 > height ) {
        this.setDY( -Math.abs(this.getDY()) );
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

越野车弹跳球 的相关文章

  • 将屏幕坐标转换为模型坐标

    我有一些新手问题 在我的应用程序 processingjs 中 我使用scale 和translate 来允许用户缩放和滚动场景 只要我将比例设置为 1 0 就没有问题 但每当我使用比例 即比例 0 5 时 我都会迷失 我需要将 mouse
  • 检测精灵套件中的碰撞

    我正在尝试使用精灵套件制作一个简单的游戏 基本思想是 有一名玩家可以跳跃以避免阻挡 但我有一个问题 我不知道如何做到当玩家击中方块时玩家消失并且血液动画开始 首先 我不明白我在苹果网站上找到的这段代码的作用 static const uin
  • “星云”类不存在

    我在处理 3 3 时遇到问题 我刚刚开始开发一种星云模拟器 旨在模拟恒星从星云到红巨星的诞生和生命周期 到目前为止 我已经创建了两个类 Gas 针对每个单独的气体粒子 和 Nebula 指粒子的集合 我在编辑器中输入了以下代码 每次都得到相
  • 圆碰撞后的新速度

    在圆形台球桌上 台球以速度 v1 与台球边界碰撞 该碰撞检测如下 double s sqrt p x a p x a p y b p y b if s
  • 将球从表面弹起

    我目前正在编写像 Breakout 这样的游戏 我想知道如何才能正确地将球从表面弹起 我采用了将速度旋转 90 度的简单方法 即 vx vy gt vy vx 这 毫不奇怪 效果不太好 如果我知道球的位置和速度 以及球将击中的点 但会反弹
  • 如何使用更少的 import 语句导入 Java 中的多个类? [复制]

    这个问题在这里已经有答案了 我对在 Java 中使用包还很陌生 我想知道是否有一种更简单的方法来使用更少的 import 语句导入类 我正在使用处理并且我已经开始使用用于处理的 Box2D创建一些游戏 为了使用该库 我必须将以下内容添加到我
  • 在课堂上使用碰撞列表

    我创建了一个类来创建矩形并将它们放入列表中 我不想让它们碰撞 所以我使用 collidelist 但它不起作用 矩形仍在碰撞 我还希望矩形在击中特定点时向下移动并更改 x 位置 我可以做到这一点 但我不确定它是否会阻止碰撞列表工作 请查看下
  • 处理中带有 Alpha 通道的视频

    我想知道是否有人可以出色地帮助我完成我正在做的事情Processing 我需要在实时源上播放带有透明度的视频文件 以便视频不仅仅是一个矩形 这是我认为需要添加或更改的代码部分 我对这一切都非常陌生 我非常感谢任何可以提供帮助的人 如果您的视
  • ArrayList中存储不同类型

    我想将元素存储在列表中 每个元素有4个参数 我正在尝试创建一个数组列表 为每个元素存储 4 个参数 它们是不同类型的 iD intx位置 浮动y 位置 浮动名称 字符串 I use ArrayList
  • 有没有办法让两个触发游戏对象发生碰撞?

    这是一个 2D 游戏 我有一个可以发射触发射弹 带有触发碰撞器 的玩家和可以做同样事情的敌人 当玩家的射弹与敌人碰撞时 就会发生一些事情 反之亦然 然而 当玩家射弹和敌人射弹碰撞时 它们只是忽略碰撞 互相穿过 什么也没有发生 他们还有一个具
  • (在Eclipse中使用处理库)如何使用窗口模式?

    http processing org learning eclipse http processing org learning eclipse 根据步骤5 我使用了PApplet main new String present MyGa
  • Javascript画布碰撞侧面检测

    嘿 我正在尝试获取画布中两个对象碰撞的一侧 这是我用于碰撞检测的内容 但它仅检查碰撞 而不检查特定的侧面 其中 o1 和 o2 是具有属性的对象 x X 轴上的位置 y Y 轴上的位置 w 矩形的宽度 h 矩形的高度 var collide
  • 两点碰撞法线

    我正在尝试计算两点的碰撞法线 我需要这个碰撞响应方程来计算新的角速度和线速度 例如 当两个 2d 或 3d 盒子的角相互碰撞时 就会发生这种情况 他们的碰撞正常情况是怎样的 现在 在顶点和面碰撞的情况下 碰撞法线将只是面的法线 它是未定义的
  • 快速的射弹并不总是能击中

    因此 对于我的游戏 有一个快速移动的子弹对象 其精灵大小为 5x5 大约 以大约 30 的速度移动 需要撞击厚度仅为 5 像素左右的相对较薄的 Enemy 物体 子弹以一定的固定距离间隔穿过敌人而不会发生碰撞 I think这是因为子弹移动
  • 将数据从 C# 传递到 jQuery

    我是一名独立程序员 正在寻求如何最好地处理以下情况的建议 我目前正在开发一个 C Winforms 应用程序 我正在编写的新功能允许用户创建Processing js 草图以进行数据分析 我构建了一个Processing js IDE 正在
  • 如何使用 Twitter4j 检索超过 100 个结果

    我正在使用 Twitter4j 库来检索推文 但我得到的信息还不足以满足我的目的 目前 我从一页最多获取 100 个 如何在处理中的以下代码中实现 maxId 和sinceId 以便从 Twitter 搜索 API 检索超过 100 个结果
  • 多次碰撞的 Sprite Kit 碰撞

    我已经查看并找到了单一碰撞的答案 但我正在寻找一种方法来检测多种类型的碰撞 我正在制作一个游戏 其中有 3 个我想要的碰撞 用户飞机与敌方子弹碰撞 用户子弹与敌机碰撞 我已经在工作 以及敌方子弹和用户子弹碰撞 我已设置并正确设置所有cate
  • SqLite 多核处理

    如何配置 SqLite 3 使用 1 个以上的 CPU 核心来处理单个查询 从3 8 7版本开始 SQLite可以使用多线程对大数据集进行并行排序
  • 正在处理中播放多个视频

    我正在处理并希望自动一个接一个地播放多个视频 下面是我当前的代码 但是当第一个视频播放完毕时 下一个视频不会自动开始 希望你能帮忙 import processing video Movie myMovie1 myMovie2 myMovi
  • 相当于 Java 中的 C# 匿名方法吗?

    在 C 中 您可以匿名定义委托 即使它们只不过是语法糖 例如 我可以这样做 public string DoSomething Func

随机推荐

  • 使用文件中的 html 启动默认浏览器,然后跳转到特定锚点

    我需要从程序根目录打开一个html文件并让它跳转到指定的锚点 我可以通过简单的操作完美地打开该文件 System Diagnostics Process Start site html 但一旦我尝试将锚点添加到末尾 它就无法找到该文件 我能
  • 如何在戈多中使刚体跳跃而不赋予其飞行能力

    我本来会使用运动体 但我想将现实生活中的物理添加到我的 2d 对象中 但似乎我可以通过多次按向上键来飞行 extends RigidBody2D var velocity Vector2 ZERO const GRAVITY 35 cons
  • Moshi 期望 BEGIN_OBJECT 但在路径 $ 处为 BEGIN_ARRAY

    这不是改造 而是 Firebase 消息处理程序服务中的手动解析 我在用KotlinJsonAdapterFactory 当建造我的Moshi实例 由于某种原因 当我要求将其中一个节点解析为对象时 它认为其中一个节点是一个数组 这是 JSO
  • 如何打印来自编辑文本的数据?

    final ViewGroup layout6 ViewGroup LayoutInflater from Menus this inflate R layout beefkabobsandwhichdialog null AlertDia
  • 在 Android 上显示实时 UDP 或 RTP 流(组播)

    我刚接触 Android 开发几周 我需要编写一个应用程序 可以向用户显示以 UDP 或 RDP 多播的实时流 该流位于诸如 rtp 230 0 0 11 1234 之类的地址 并通过该模块通过 WIFI 发出 我已经尝试从播放器 Daro
  • sendAsynchronousRequest 导致 UI 冻结

    downloadImages 是一个按钮 每当我按下它时 旋转器应该开始滚动 异步请求应该 ping Google 以确保存在连接 并且在收到响应后 我开始同步下载图像 不知怎的 旋转器不会去 看起来好像请求是同步的而不是异步的 IBAct
  • 有没有办法检测iPhone是否处于反色模式?

    您知道在辅助功能中 用户如何将主页按钮设置为三次单击并将其设置为 反色模式 吗 您的应用程序有办法检测手机是否处于反色模式吗 谢谢 是的 而且很简单 您可以致电 UIAccessibilityIsInvertColorsEnabled 返回
  • 确定安装的 PowerShell 版本

    如何确定计算机上安装了哪个版本的 PowerShell 以及是否已安装 Use PSVersionTable PSVersion以确定引擎版本 如果该变量不存在 则可以安全地假设引擎是版本1 0 注意 Host Version and Ge
  • 如何为 WCF 数据服务 (OData) 打开 IIS7 输出缓存

    我有一个 WCF 数据服务 它对 URL 方面的参数的相当复杂的概念敏感 常见的情况是 URL 类似于http 主机 端口 数据服务 Na vigation MetadataService svc Inventories http host
  • 在带有 CLion 的 Windows 中使用 CMake (mingw) 在 C++ 中未定义的 Qt5 引用

    我在尝试着使用 CMake 学习 Qt5 http doc qt io qt 5 cmake manual html在新的CLion C C IDE https www jetbrains com clion 我对这些工具还比较陌生 所以
  • 如果没有 TLS 1.0,WCF .NET 4.0 将无法工作

    在我工作的公司中 我们有一个产品在 NET Framework 4 0 中使用 SSL 通过 net tcp 使用 WCF 在特定客户端中 出于安全原因 需要禁用 SSL 2 SSL 3 和 TLS 1 问题是如果没有 TLS 1 0 通信
  • 从 PHP 脚本运行 PHP 脚本而不阻塞

    我正在构建一个蜘蛛 它将遍历各个站点并对它们进行数据挖掘 由于我需要单独获取每个页面 这可能需要很长时间 可能 100 页 我已经将 set time limit 设置为每页 2 分钟 但 apache 似乎无论如何都会在 5 分钟后杀死脚
  • Firebase函数:支持跨函数的全局变量

    我想在 http firebase 函数中缓存最近的记录 比如最近 24 小时 在 http firebase 函数 例如 fetchLastXRecords 中 我在缓存 定义的全局变量来存储记录 中查找记录 如果找不到 则从数据库中获取
  • pandas KeyError,使用浮点数时找不到索引

    我遇到以下问题 import pandas as pd import numpy as np df pd DataFrame np random rand 401 index np linspace 0 1 401 print np lin
  • 通过VBA插入Excel公式

    作为另一个问题的延续 我试图解决通过 VBA 在宏上插入公式的问题 这是我的代码 Range F1 Select ActiveCell Formula IF C1 LPPD MIPRU IF C1 LPGR DCT IF OR C1 LPF
  • Grails 中具有一个域类的依赖下拉菜单

    因此 我有一个域类 它有很多字段 我在 GSP 中准备了五个下拉菜单 并且数据在任何下拉菜单的 onChange 上正确过滤 但存在问题 对于在下拉列表中选择的几组组合 我们在数据库中没有数据 并且这些组合不是固定的 所以 我在想是否有可能
  • 如何将 asp:SiteMapPath 的输出转换为列表?

    我对 NET 和 VB NET 都非常不熟悉 不太清楚如何做到这一点 假设我有这样的代码 div class breadcrumb div
  • WPF 在 InitializeComponent 期间获取 Control null 引用

    So my InitializeComponentWindow 构造函数中的方法调用通过 XML 运行并添加控件并将它们插入到事件中 因此 当其中一个控件的属性发生更改时 它会调用订阅该事件的方法 该方法引用尚未构建的控件 为什么这里会按这
  • 如何在c中绘制直方图

    如何在 c 中从 2 个数组绘制直方图 您可以用这个字符 来表示图表中的计数 这是一个可以打印的字符 printf c char 254u 考虑一些随机的float arr and hist保存计数的数组 Code Function gen
  • 越野车弹跳球

    我在处理中制作碰撞球草图时 遇到了一个奇怪的错误 尽管有从墙上弹起的条件 有些球粘在上面 我在这里找不到错误的根源 有人可以帮忙吗 我还意识到可能很少 很多 糟糕的编码实践 但我事先道歉 我在下面发布代码 1 主要 https pasteb