使用自定义 Java class 绘图背景而非对象的已编译处理代码
Compiled Processing code using custom Java class drawing background but not object
此代码可以正确编译,然后 运行 但是我的 Circle 对象在调用 draw 方法时没有显示在屏幕上,它有一个包含对 Processing 中 ellipse 方法的调用的 draw 方法.我对此感到困惑,因为我可以更改背景的颜色并看到该更改得到反映,但没有别的。第一个 class 是一个抽象的父对象,代表要绘制的更复杂的对象,而 Circle class 只代表一个二维形状,主要用于我测试在 Eclipse 和自定义中使用处理 java classes。最后是本例中的驱动程序或草图,Bounce,它应该在屏幕上放置一个 Circle 对象。
//Name: CelestialBody
//Models generic space objects
//For ex. - Stars
// Planets
// Asteroids
// Moons
// Etc.
import processing.core.*;
public abstract class CelestialBody {
//constants
static final float c = 299792458; //speed of light in vacuum in meters per second
//object variables
String name; //name of object
float volume; //volume in cubic meters
float area; //area in square meters
float density; //density in kilograms per cubic meters
float mass; //mass in kilograms
float distanceM; //distance in meters
float distanceKM; // distance in kilometers
float xPos; //x coordinate (meters relative to origin)
float xVel; //velocity vector on x-axis in meters per second
float yPos; //y coordinate (meters relative to origin)
float yVel; //velocity vector on y-axis in meters per second
float zPos; //z coordinate (meters relative to origin)
float zVel; //velocity vector on z-axis in meters per second
PVector location= new PVector(); //location stored in vector object
PVector velocity= new PVector(); //velocity vector
PApplet parent;
//constructor
public CelestialBody(PApplet p, String name, float volume, float area, float density, float mass,
float x, float xVel, float y, float yVel, float z, float zVel)
{
parent=p;
this.name=name;
this.volume=volume;
this.area=area;
this.density=density;
this.mass=mass;
xPos=x;
this.xVel=xVel;
yPos=y;
this.yVel=yVel;
zPos=z;
this.zVel=zVel;
location.set(xPos,yPos,zVel);
velocity.set(xVel,yVel,zVel);
}
}
//Name: Circle
//Models generic circle from
//CelestialBody Class for the sake of
// drawing practice even though this class
//is way simpler by nature and is
//not at all related to real objects
import processing.core.PApplet;
public class Circle extends CelestialBody{
//object variables
float radius; //radius in meters
float diameter; //diameter in meters
PApplet parent;
//constructor
public Circle(PApplet p,String name, float mass, float x, float xVel, float y, float yVel, float radius){
super(p,name,0,0,0,mass,x,xVel,y,yVel,0,0);
parent=p;
this.radius=radius;
diameter = radius * 2;
area=(float)(Math.PI*Math.pow(radius,2));
}
public void drawCircle() {
//shift x and y by the radius of the circle in order to correctly center it
parent.ellipse(location.x - radius,location.y - radius,diameter,diameter);
}
}
//Name: Bounce
//Draws bouncing ball in box
import processing.core.PApplet;
public class Bounce extends PApplet {
public static void main(String args[]) {
PApplet.main(new String[] { "--present", "Bounce" });
}
public void settings() {
size(displayWidth,displayHeight);
}
public void setup(){
background(100,150,150);
}
public void draw() {
Circle circ = new Circle (this,"ball",150,0,10,0,10,150);
fill(0);
stroke(0);
circ.drawCircle();
circ.location.x=circ.location.x+circ.velocity.x;
circ.location.y=circ.location.y+circ.velocity.y;
if (circ.location.x>width||circ.location.x<0){
circ.velocity.x=circ.velocity.x*-1;
}
if (circ.location.y>width||circ.location.y<0){
circ.velocity.y=circ.velocity.y*-1;
}
}
}
你这里发生了一些事情。
首先,请注意您总是从 draw()
函数中初始化一个 Circle
对象。然后将 10 添加到 x 和 y 位置,因此您的 Circle
始终位于 10, 10
.
位置
要解决这个问题,请尝试将 circ
变量的声明移动到草图级别。
你也画错了圆。您的圈子总是以其实际位置的 upper-left 结束。由于 10,10
的 upper-left 位置在 window 的边界之外,这就是为什么你永远看不到它的原因。
要解决此问题,请修改您的 drawCircle()
代码以在正确的位置绘制椭圆。尝试将圆圈的位置更改为 mouseX, mouseY
以了解我的意思。
最后,您并不是每帧都重新绘制背景,所以您最终得到的是 "trail" 个圆圈,而不是一个圆圈。如果这不是您想要的,请尝试在 draw()
函数中添加对 background()
的调用。
此代码可以正确编译,然后 运行 但是我的 Circle 对象在调用 draw 方法时没有显示在屏幕上,它有一个包含对 Processing 中 ellipse 方法的调用的 draw 方法.我对此感到困惑,因为我可以更改背景的颜色并看到该更改得到反映,但没有别的。第一个 class 是一个抽象的父对象,代表要绘制的更复杂的对象,而 Circle class 只代表一个二维形状,主要用于我测试在 Eclipse 和自定义中使用处理 java classes。最后是本例中的驱动程序或草图,Bounce,它应该在屏幕上放置一个 Circle 对象。
//Name: CelestialBody
//Models generic space objects
//For ex. - Stars
// Planets
// Asteroids
// Moons
// Etc.
import processing.core.*;
public abstract class CelestialBody {
//constants
static final float c = 299792458; //speed of light in vacuum in meters per second
//object variables
String name; //name of object
float volume; //volume in cubic meters
float area; //area in square meters
float density; //density in kilograms per cubic meters
float mass; //mass in kilograms
float distanceM; //distance in meters
float distanceKM; // distance in kilometers
float xPos; //x coordinate (meters relative to origin)
float xVel; //velocity vector on x-axis in meters per second
float yPos; //y coordinate (meters relative to origin)
float yVel; //velocity vector on y-axis in meters per second
float zPos; //z coordinate (meters relative to origin)
float zVel; //velocity vector on z-axis in meters per second
PVector location= new PVector(); //location stored in vector object
PVector velocity= new PVector(); //velocity vector
PApplet parent;
//constructor
public CelestialBody(PApplet p, String name, float volume, float area, float density, float mass,
float x, float xVel, float y, float yVel, float z, float zVel)
{
parent=p;
this.name=name;
this.volume=volume;
this.area=area;
this.density=density;
this.mass=mass;
xPos=x;
this.xVel=xVel;
yPos=y;
this.yVel=yVel;
zPos=z;
this.zVel=zVel;
location.set(xPos,yPos,zVel);
velocity.set(xVel,yVel,zVel);
}
}
//Name: Circle
//Models generic circle from
//CelestialBody Class for the sake of
// drawing practice even though this class
//is way simpler by nature and is
//not at all related to real objects
import processing.core.PApplet;
public class Circle extends CelestialBody{
//object variables
float radius; //radius in meters
float diameter; //diameter in meters
PApplet parent;
//constructor
public Circle(PApplet p,String name, float mass, float x, float xVel, float y, float yVel, float radius){
super(p,name,0,0,0,mass,x,xVel,y,yVel,0,0);
parent=p;
this.radius=radius;
diameter = radius * 2;
area=(float)(Math.PI*Math.pow(radius,2));
}
public void drawCircle() {
//shift x and y by the radius of the circle in order to correctly center it
parent.ellipse(location.x - radius,location.y - radius,diameter,diameter);
}
}
//Name: Bounce
//Draws bouncing ball in box
import processing.core.PApplet;
public class Bounce extends PApplet {
public static void main(String args[]) {
PApplet.main(new String[] { "--present", "Bounce" });
}
public void settings() {
size(displayWidth,displayHeight);
}
public void setup(){
background(100,150,150);
}
public void draw() {
Circle circ = new Circle (this,"ball",150,0,10,0,10,150);
fill(0);
stroke(0);
circ.drawCircle();
circ.location.x=circ.location.x+circ.velocity.x;
circ.location.y=circ.location.y+circ.velocity.y;
if (circ.location.x>width||circ.location.x<0){
circ.velocity.x=circ.velocity.x*-1;
}
if (circ.location.y>width||circ.location.y<0){
circ.velocity.y=circ.velocity.y*-1;
}
}
}
你这里发生了一些事情。
首先,请注意您总是从 draw()
函数中初始化一个 Circle
对象。然后将 10 添加到 x 和 y 位置,因此您的 Circle
始终位于 10, 10
.
要解决这个问题,请尝试将 circ
变量的声明移动到草图级别。
你也画错了圆。您的圈子总是以其实际位置的 upper-left 结束。由于 10,10
的 upper-left 位置在 window 的边界之外,这就是为什么你永远看不到它的原因。
要解决此问题,请修改您的 drawCircle()
代码以在正确的位置绘制椭圆。尝试将圆圈的位置更改为 mouseX, mouseY
以了解我的意思。
最后,您并不是每帧都重新绘制背景,所以您最终得到的是 "trail" 个圆圈,而不是一个圆圈。如果这不是您想要的,请尝试在 draw()
函数中添加对 background()
的调用。