美文网首页js css html
用继承实现粒子类

用继承实现粒子类

作者: 大龙10 | 来源:发表于2022-05-13 06:17 被阅读0次

书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
目录

4.8 用继承实现粒子类

  在粒子类上实践继承的用法。

1、简单的Particle类

class Particle {
  PVector position;
  PVector velocity;
  PVector acceleration;

  Particle(PVector l) {
    acceleration = new PVector(0, 0.05);
    velocity = new PVector(random(-1, 1), random(-1, 0));
    position = l.get();
  }

  void run() {
    update();
    display();
  }

  void update() {
    velocity.add(acceleration);
    position.add(velocity);
  }

  void display() {
    fill(0);
    ellipse(position.x, position.y, 12, 12);
  }
}

2、子类(类名为Confetti)

继承Particle类。Confetti类会从Particle类中继承所有的变量和方法,我们还要为它定义自己的构造函数,并通过super()函数调用父类的构造函数。

class Confetti extends Particle {
    我们可以在这里加入Confetti专有的变量
    Confetti(PVector l) {
    super(l);
    }
  这里没有update()的实现,因为我们从父类中继承了update()函数
  void display() {   覆盖display方法
    rectMode(CENTER);
    fill(175);
    stroke(0);
    rect(location.x, location.y, 8, 8);
    }
}

3、实现

可以把本例实现得稍微复杂一些:让Confetti粒子像苍蝇一样在空中飞动旋转。

  • 对此,可以用第3章里的角速度和角加速度实现旋转
  • 用一种更简单的解决方案。
    我们知道粒子的x坐标,它的值介于0和窗口宽度之间。我们想要实现这样的效果:如果粒子的x坐标为0,它转动的角度也是0;如果x坐标等于窗口宽度,它转动的角度就等于2π。
    对此,你有没有一些想法?是的,我们想把某个区间内的值映射到另一个区间,Processing的map()函数正好能完成这样的操作。
    如果要让旋转效果更加明显,我们可以把角度映射到0和2π*2之间。
    在display()函数中加入以上逻辑:
void display() {
    float theta = map(location.x,0,width,0,TWO_PI*2);
    rectMode(CENTER);
    fill(0,lifespan);
    stroke(0,lifespan);
    pushMatrix();
    translate(location.x, location.y);  使用rotate()函数之前,我们必须熟悉变换。如果想了解rotate(theta);
    rect(0,0,8,8);
    popMatrix();
  }

4.9 多态基础

  • Dog对象可以当做Dog类的实例,也可以当做Animal类的实例,这就是多态的一个例
    子。
  • 多态(Polymorphism,源自希腊语polymorphos,指多种形态)指的就是把一个实
    例对象当做多重形态。
  • Dog对象肯定是Dog类的实例,Dog类同时继承自Animal类,因此Dog对象也可以当做Animal类的实例。

相关文章

  • 用继承实现粒子类

    书名:代码本色:用编程模拟自然系统作者:Daniel Shiffman译者:周晗彬ISBN:978-7-115-3...

  • Java面向对象 基础知识(二)

    继承的实现:继承是用来扩展父类的功能,用extend关键字来完成继承格式:class 子类 extends 父类 ...

  • 接口与继承复习

    接口和继承 类继承--->子类完全继承父类特点 抽象类继承--->继承时抽象的部分不同的子类可以有不同的实现 接口...

  • 解析“用ES5原型链实现的组合继承”

    用ES5实现继承,就是用原型链实现。只要把子类和父类的原型链打通就解决了主要问题。最常用的是组合继承: 1、 。这...

  • Cpp6 封装、继承和多态

    Cpp6 封装、继承和多态 继承 子类从父类继承成员变量 子类从父类继承成员函数 实现数据隐藏 为什么要隐藏数据成...

  • 继承、分类(类别)和扩展

    继承 继承就是子类可以继承父类的属性与方法,使用继承可以实现代码的复用,减少代码冗余,子类可以直接拥有父类...

  • 修改UITextfield的leftview的位置

    继承UITextfield实现子类CustomTF,复写-(CGRect)leftViewRectForBound...

  • juc7-CountDownLatch与CyclicBarrie

    一 CountDownLatch 继承AbstractQueuedSynchronizer实现子类Sync Cou...

  • Python单例模式

    用__new__实现 关于__new__的内部原理,请点击 为了让子类不继承父类的__new方法,子类也应该调用o...

  • 【第 11 天】继承 与 多态

    继承 与 多态 继承 子类继承父类,子类的实例即是子类的类型也是父类的类型。判断是否为某个类型(的实例)可以用函数...

网友评论

    本文标题:用继承实现粒子类

    本文链接:https://www.haomeiwen.com/subject/zgphurtx.html