有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在其他Scala类中使用处理函数?

因此,我试图使用Processing创建一个Scala应用程序,我的问题是如何使用除“main”类之外的一些处理函数,在“main”类中整个应用程序都是实例化的

这是启动应用程序的主类


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

当我将display()函数添加到main类中的draw()方法时,display()函数可以工作,但当我将它移动到类本身时,它会以NullPointerException的方式失败

关于如何在app类以外的其他类中使用处理函数,有什么想法吗


共 (1) 个答案

  1. # 1 楼答案

    所以我设法找到了答案

    问题基本上是,你需要把“处理草图”作为一个参数在课堂上传递。例如:

     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)
    

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