We are about to switch to a new forum software. Until then we have removed the registration on this forum.
How would I use rect() from a class other than my Main? I just get the error:
java.lang.NullPointerException
at processing.core.PApplet.rect(PApplet.java:11559)
at Player.frame(Player.java:21)
at Main.draw(Main.java:40)
at processing.core.PApplet.handleDraw(PApplet.java:2418)
at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1540)
at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:316)
My main class is
import processing.core.PApplet;
public class Main extends PApplet {
public static void main(String args[]) {
PApplet.main("Main");
}
public static int sizeX;
public static int sizeY;
public void settings() {
size(1440,810);
sizeX = width;
sizeY = height;
}
Player player = new Player((int) (width/2), (int) (height/2));
byte[][] world = new byte[100][50];
public void setup() {
rectMode(CENTER);
for(int x = 0; x<world.length; x++) {
for(int y = 0; y<world[0].length; y++) {
if(y == world[0].length-1 || Math.random()<=0.1) {
world[x][y] = 1;
}
}
}
}
public void draw() {
for(int x = player.getX()-120; x<player.getX()+width; x+= 40) {
for(int y = player.getY()-120; y<player.getY()+height; y+= 40) {
if((int)(x/40)<=world.length && (int) (y/40)<=world[0].length && (int) (x/40)>=0 && (int) (y/40) >=0) {
//System.out.println(x/20 + " " + y/20);
if(world[x/40][y/40] > 0) {
rect(x,y,40,40);
}
}
}
}
player.frame(world);
}
}
and my player class is
import processing.core.PApplet;
public class Player {
int x = 0;
int y = 0;
public Player(int stX, int stY) {
x = stX;
y = stY;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
boolean up = false;
boolean down = false;
boolean left = false;
boolean right = false;
public void frame(byte[][] world) {
rect(Main.sizeX/2,Main.sizeY/2,80,40);
}
public void keyPressed() {
}
}
Answers
If you had seen other Processing's 3rd-party libraries, for most of them, you may had noticed we pass
this
as their 1st argument when instantiating them.Each "ignited" PApplet got a PGraphics canvas.
And in order for other top classes to access it, they need to know the reference to the target PApplet.
Change your class' constructor to include an extra parameter. And save it inside a new field: *-:)