Processing中Bubble构造函数可读取height但无法读取width的问题
问题原因与解决方案
核心问题:代码执行顺序导致的width取值错误
你遇到的问题是Processing的代码执行顺序造成的:
- 全局变量(包括
b1、b2、b3这三个Bubble实例)会在setup()函数执行前完成初始化,也就是说Bubble的构造函数会在size(1200,800)调用前就运行了。 - 这时候Processing还没设置自定义画布尺寸,
width和height都是默认的100像素。
那为什么y轴看起来正常?因为reset()方法里的height是在draw()循环里调用的,此时setup()已经执行完毕,height已经被设置为800,所以气泡重置y位置时能拿到正确值。但x轴的初始值是在构造函数里用默认的width=100计算的,所以x的范围被限制在d/2到100-d/2之间,自然不会超过80左右。
修复方法
把Bubble实例的创建移到setup()函数内部,确保在size()执行完成后再初始化气泡:
修改第一个标签页的代码:
Bubble b1; Bubble b2; Bubble b3; void setup(){ size(1200,800); // 在size之后创建实例,此时width和height已正确设置 b1 = new Bubble(); b2 = new Bubble(); b3 = new Bubble(); } void draw(){ background(0); b1.render(); b1.move(); b1.reset(); println(b1.x); b2.render(); b2.move(); b2.reset(); println(b2.x); b3.render(); b3.move(); b3.reset(); println(b3.x); }
这样构造函数里的width就能拿到1200的正确值,气泡的x轴位置就会分布在整个画布宽度范围内了。
内容的提问来源于stack exchange,提问作者Natalie Pockett
相关产品推荐
相关产品推荐

