如何在其他 Scala 类 中使用 Processing 函数?

How can I use Processing functions in other Scala classes?

所以我正在尝试使用 Processing 制作一个 Scala 应用程序,我的问题涉及如何在 "main" class 之外使用一些处理函数实例化整个应用程序的位置。

这是启动应用程序的 main Class


import processing.core.{ PApplet, PConstants }
import attackers._

class main extends PApplet {

  override def setup() = {
    background(255, 255, 50)
  }

  override def settings() = {
    ...
  }

  override def draw() = {
    var start = new Cell(0, wHeight / 2)
    val base = new BasicAttacker(start)
    ...
    base.move()
    base.display();
  }
}

object main extends App {

  PApplet.main("tower.main")

}

这是我想使用 Processing 中的 fillrect 函数的地方:


import tower._
import processing.core.PApplet

class Base(cell: Cell) extends Basic(cell) {
  ...

  var x = cell.x
  var y = cell.y

  ...

  def display() {
    fill(150, 100, 150)
    rect(x, y, 50, 50);
  }

}

出现的错误是:

java.lang.NullPointerException
    at processing.core.PApplet.fill(PApplet.java:14781)
    at attackers.BasicAttacker.display(BasicAttacker.scala:27)
    at tower.Game.draw(Game.scala:73)
    at processing.core.PApplet.handleDraw(PApplet.java:2482)
    at processing.awt.PSurfaceAWT.callDraw(PSurfaceAWT.java:1547)
    at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:313)

当我将 display() 函数添加到 mainclass 中的 draw() 方法时,display() 函数有效,但不知何故它失败并出现 NullPointerException 当我将它移动到 class 本身时。

关于如何在除应用 class 以外的其他 class 中使用处理功能的任何想法?

所以我设法找到了这个问题的答案。

问题基本上是您需要将 "Processing sketch" 作为参数传递给 class。例如像这样:

 class BasicTower(c: Cell, sketch: PApplet) extends Tower(c, sketch) {

  def display() {
    sketch.fill(102, 255, 102)
    sketch.rect(cell.x, cell.y, 50, 50)
  }
 }

那么如果要在主处理文件中使用,只需要这样写:

new BasicTower(Cell, this)

不确定这是否是最好的方法,但至少它有效。