我正在做桌球游戏,正在尝试使母球击中球。 我将母球留在桌子内,我不太了解碰撞。 由于某种原因,我必须单击两次才能放下母球。

  class Ball{
  PVector postions;
  PVector velocity;
  float r,m;
  Ball(float x, float y, float r_) {
  postion = new PVector(x,y);
  velocity = PVector.random2D();
  velocity.mult(3);
  m = r*.1;
  int xpos,ypos,diam;
  Ball(
  int tempxpos, 
  int tempypos, 
  int tempdiam
  ){
  xpos=tempxpos;
  ypos=tempypos;
  diam=tempdiam;


  }
  void update(){
  postion.add(velocity);
  ellipse(xpos,ypos,diam,diam);
  }

  void checkBoundaryCollision(){
  if(postion.x > width-r) {
  positon.x = width-r;
  veloctiy.x *= -1;
  }
  else if (position.x <r) {
  position.x = r;
  velocity.x*=-1;
  }
  else if (position.y > height-r) {
  position.y = height-r;
  velocity.y*=-1;
   }
  }

  void checkCollision(Ball other) {
  PVector bVect = PVector.sub(other.position, position);
  float bVectMag = bVect.mag();

  if(bVectMag < r + other.r){
   float theta = bVect.heading();
   float sine = sin(theta);
   float cosine = cos(theta);

  PVector[] bTemp = {
    new PVector(), new PVector()
  };

  bTemp[1].x = cosine * bVect.x + sine * bVect.y;
  bTemp[1].y = cosine * bVect.y - sine * bVect.x;

  PVector[] vTemp = {
    new PVector(), new PVector() 
  };

  vTemp[0].x = cosine * velocity.x + sine * velocity.y;
  vTemp[0].y = cosine * velocity.y - sine * velocity.x;
  vTemp[1].x = cosine * other.velocity.x + sine * other.velocity.y;
  vTemp[2].y = cosine * other.velocity.y - sine * other.velocity.x;

  PVector[] vFinal = {
    new PVector(), new PVector()
  };

  vFinal[0].x = ((m - other.m) * vTemp[0].x + 2 * other.m * vTemp[1].x) / (m + other.m);
  vFinal[0].y = vTemp[0].y;

  vFinal[1].x = ((other.m - m) * vTemp[1].x + 2 * m * vTemp[0].x) / (m + other.m);
  vFinal[1].y = vTemp[1].y;

  void display() {
    noStroke();
  }



    Ball b1, b2;
    int mouseClick=0;
    String msg;
    int steps = 20;
    int difx, dify;

   void setup() {
   msg="";
   b1 = new Ball(mouseX, mouseY, 50);
   b2 = new Ball(mouseX, mouseY, 50);
   size(600, 400);
  }



void draw() {
  background(0, 153, 0);
  fill(255, 255, 255);
  b1.update();
  fill(0, 0, 0);
  b2.update();
  textSize(20);
  text(msg, 0, height-5);

  if (mouseClick==0) {
    b1.xpos=mouseX;
    b1.ypos=mouseY;
    msg="click twice to place the ball";
  } 
  else if (mouseClick==1) {
    b1.xpos=mouseX;
    b1.ypos=mouseY;
    fill(255, 255, 255);
    b1.update();
  } 
  else if (mouseClick==3) {
    msg="click to shoot";
    difx = b1.xpos-b2.xpos;
    dify = b2.ypos-b2.ypos;
    b1.xpos-=difx/steps;
    b1.ypos-=dify/steps;
    b1.xpos+=5;
  }

  if (mouseClick==2) {
    msg="click to place the eight ball";
    b2.xpos=mouseX;
    b2.ypos=mouseY;
    b2.update();
  }
}


void mousePressed() {
  mouseClick++;
}

  ask by Leopold Stoich translate from so

本文未有回复,本站智能推荐:

1回复

处理-椭圆/矩形碰撞的方法

我正在编写一个游戏,可能需要花很长时间来解释,但总而言之,玩家是一个ellipse()并跟随鼠标,而rect()是向下移动屏幕的障碍,需要使用玩家,否则游戏结束。 正如我使用ArrayList来存储每个障碍物对象一样,有多个矩形。 当前,玩家可以直接穿过矩形,而不会发生任何变化。 我已
1回复

处理PGraphics椭圆不增加

我只是想通过blendMode(DIFFERENCE)来使圆变大和反转。 但半径不变。
2回复

处理:For-loop,对角线椭圆

我快要上课了,这是我上课时要做的。 我应该做一个for循环,在对角线上创建椭圆。 我的代码显示,但是我无法弄清楚为什么右上角的最后一个椭圆没有显示..我丢失了什么?
1回复

绘制椭圆形等待几秒钟,然后在处理中绘制另一个椭圆形

因此,我正在使用Processing,我希望程序绘制一个椭圆,然后等待2秒钟,然后绘制另一个椭圆。 我怎样才能做到这一点? 这些是我想画的椭圆: ellipse(350, 250, 160, 120); // big horizontal ellipse strokeWei
2回复

处理:椭圆鼠标跟随,没有重叠

我是Processing的一个完整的初学者,并且尝试获取一行椭圆,以使其边缘接触但不重叠的方式遵循鼠标的路径。 我的第一个练习是使用一行来跟踪数组中的鼠标历史记录,注释掉的行也为每个索引添加了一个椭圆: ArrayList <PVector> history; float p
1回复

在处理中使用beginShape绘制完美的椭圆(圆形)

我的processing.js草图遇到速度问题,想通过使用beginShape()endShape()创建25个椭圆来加快速度。 我知道这具有有限的功能,但否则处理将在每个椭圆调用上执行context.beginPath(),如下所示: 如果我可以用贝塞尔曲线顶点或简单曲线顶点创建椭圆
2回复

如何使(移动的)椭圆可点击? 处理

所以我从一个星期前开始学习处理,我正在尝试使移动的椭圆形可点击。 我遵循了处理API,但无法弄清楚。 我删除了所有与可点击椭圆有关的代码,因为这太糟了。 在声明所有变量的部分中,您可以使用以下命令查看我: int breedte = 600; int hoogte = 600;
1回复

处理-基本! 椭圆使用循环逐渐变小

我只是在学习处理的基础知识,而我陷入了循环。 如何使椭圆线(可能是7个)逐渐变小并仍然连接它们? 到目前为止,这是代码,但无法正常工作! 另外,另一个问题! 这是一个圆形的十字架网格。 使用循环,我如何得到五行,然后是下面的四行,然后是三行,等等。
1回复

如何在处理过程中使用不同的键组移动每个椭圆?

我想使用“处理”中的按钮来添加/删除椭圆。 我使用void keyPressed()和void keyReleased()作为键。 现在,我可以添加更多,并删除一些省略号。 例如,如果我有一个,我可以按一个按钮,然后再按下一个。 或按一个按钮将其删除。 但是,现在我想对每个椭圆使用不同
2回复

避免碰撞示例或帮助

我一直试图找到一个避免碰撞的例子,我可以适应并用于我正在进行的游戏。 它将用于模拟滑雪者的动作以避开山上的树木。 我基于自主角色的转向行为,并且有许多关于路径追踪和植绒的好例子,但我找不到任何好的避免碰撞的例子。 代码的性质网站有很棒的转向教程,但似乎涵盖了除了避障之外的一切。 我从