Как я могу использовать функции обработки в других Scala классах? - PullRequest
1 голос
/ 13 февраля 2020

Итак, я пытаюсь создать приложение Scala, использующее Обработка , и моя проблема связана с тем, как я могу использовать некоторые функции обработки, отличные от «основного» класса, где все приложение

Это основной класс , где запускается приложение.


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")

}

И здесь я хочу использовать fill и rect функции из Processing:


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$12.callDraw(PSurfaceAWT.java:1547)
    at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:313)

Функция display() работает, когда я добавляю ее в * Метод 1021 * в классе main, но почему-то происходит сбой с NullPointerException , когда я перемещаю его в сам класс.

Любые идеи о том, как я могу использовать функции обработки в других классы, чем класс приложения?

1 Ответ

0 голосов
/ 25 марта 2020

Так что мне удалось найти ответ на этот вопрос.

Проблема в основном в том, что вам нужно передать «Эскиз обработки» в качестве аргумента в классе. Например, вот так:

 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)

Не уверен, что это лучший способ сделай это, но по крайней мере это работает.

...