Tree 子类不';t显示处理

Tree 子类不';t显示处理,tree,processing,superclass,display,flower,Tree,Processing,Superclass,Display,Flower,我正在做一个作业,需要创建一个基类树,子类Flower。 但我不知道哪里弄错了,当鼠标按下时,树上的花不会出现,只有树出现了。这是我到目前为止的代码 树; ArrayList树列表=新的ArrayList(); 花儿; ArrayList flowerList=新的ArrayList(); 无效设置(){ 大小(800800); 树=新树(mouseX、mouseY、半圆周率、高度/12); 花=新花(mouseX,mouseY,半皮,高度/12); } 作废提款(){ 背景(255); //当

我正在做一个作业,需要创建一个基类树,子类Flower。 但我不知道哪里弄错了,当鼠标按下时,树上的花不会出现,只有树出现了。这是我到目前为止的代码

树;
ArrayList树列表=新的ArrayList();
花儿;
ArrayList flowerList=新的ArrayList();
无效设置(){
大小(800800);
树=新树(mouseX、mouseY、半圆周率、高度/12);
花=新花(mouseX,mouseY,半皮,高度/12);
}
作废提款(){
背景(255);
//当前树
对于(int j=0;j5){
drawMouseTree(endX,endY,旋转-PI/5,高*0.7);//左
drawMouseTree(endX,endY,旋转+PI/5,高*0.7);//右
}
//在每根树枝上开一朵花
如果(高度>5){
中风(255102178);
填充(255、102、178);
椭圆(endX,endY,5,5);
}
}
类树{
浮动XPO、YPO;
浮动旋转;
高飘飘,尾端,尾端;
树(浮动XPO、浮动YPO、浮动旋转、浮动高度){
this.xPos=xPos;
this.yPos=yPos;
这个旋转=旋转;
this.tall=高;
}
空心绘图树(浮动XPO、浮动YPO、浮动旋转、浮动高度){
//枝干
浮动端x=xPos-高度*cos(旋转);
浮动端Y=yPos-高度*sin(旋转);
//画一棵树
冲程(0);
冲程重量(2);
行(xpo、ypo、endX、endY);
//创建2个分支
如果(高度>5){
drawTree(endX,endY,旋转-PI/5,高*0.7);//左
drawTree(endX,endY,旋转+PI/5,高*0.7);//右
}
}
}
类花扩展树{
花(浮动XPO、浮动YPO、浮动旋转、浮动高){
超级(XPO、YPO、旋转、高);
}
空花儿(){
超级绘图树(xPos、YPO、旋转、高);
//在每根树枝上开一朵花
如果(高<40&&高>5){//,那么花就会出现在树顶周围
冲程(255、102、178);
填充(255、102、178);
椭圆(endX,endY,5,5);
}
}
}
我对超级儿童班的概念还很陌生。如果您能帮助解决此问题,我们将不胜感激

编辑: 找出我在drawFlower()中使用endX,endY的错误。以下是新代码:

类扩展树{
花(浮动XPO、浮动YPO、浮动旋转、浮动高){
超级(XPO、YPO、旋转、高);
}
空花儿(){
超级绘图树(xPos、YPO、旋转、高);
//在每根树枝上开一朵花
如果(高度>5){
//画花
冲程(255、102、178);
填充(255、102、178);
椭圆(芬克斯,芬尼,5,5);
}
}
}
类树{
浮动XPO、YPO;
浮动旋转;
高高飘浮,芬克斯,芬尼;
树(浮动XPO、浮动YPO、浮动旋转、浮动高度){
this.xPos=xPos;
this.yPos=yPos;
这个旋转=旋转;
this.tall=高;
}
空心绘图树(浮动XPO、浮动YPO、浮动旋转、浮动高度){
//枝干
浮动端x=xPos-高度*cos(旋转);
浮动端Y=yPos-高度*sin(旋转);
finX=endX;
finY=endY;
//画一棵树
冲程(0);
冲程重量(2);
行(xPos,yPos,endX,endY);//分支
//创建2个分支
如果(高度>5){
drawTree(endX,endY,旋转-PI/5,高*0.7);//左
drawTree(endX,endY,旋转+PI/5,高*0.7);//右
}
}
}
然而,结果是: 这棵树的每一根枝干上都有一朵花吗?
如下所示:

您窗口的
高度是
800

传递到
构造函数的最后一个参数是
height/12

800/12
66.6666…
,它被截断为
66

换句话说,
toll
变量保存值
66
。然后在该
if
语句中使用该变量:

if(高度<40&&t高度>5){
由于
66
小于
40,因此该
if
语句的计算结果永远不会为真

您只需在该
if
语句的前面打印出
toll
的值,就可以轻松地测试这一点:

println(高);
即使您将
if
语句注释掉,您仍然看不到flowers。再次说明,
println()
函数的作用是:

笔划(255、102、178);
填充(255、102、178);
println(endX+,“+endY);//打印0.0,0.0
椭圆(endX,endY,50,50);
此时,
endX
endY
的值始终为
0
。这与您使用它们的方式有关

我明白你的意思了,但是在代码的这一点上,你实际上没有权限访问分支的结束位置


如果我是你,我会从更简单的角度出发。不要使用递归函数来绘制树,而是从顶部有花的单行开始,然后从那里开始。

谢谢你回答我的问题。我应该提到它必须是递归树,需要一些子类。@Tracey,即使这是你的要求,我仍然建议启动siml