我为我的应用程序计算随机颜色。它们是rgba格式,我测试了各种版本的着色。现在我想要完全不透明的立方体,但因为这可能会改变,我已经实现了这样的着色:
int r = rnd.nextInt(255);
int g = rnd.nextInt(255);
int b = rnd.nextInt(255);
int a = 255;
int color = (r & 0xFF) | ((g & 0xFF) << 8) | ((b & 0xFF) << 16) | ((a & 0xFF) << 24);
现在的代码重复约。 13,000个立方体。或者我必须说它会。因为dartium崩溃了('Aw,Snap!显示这个网页时出了问题。')。为了'wtf',如果我在a = 255;
上设置断点并在继续删除该断点之前它正常工作并显示。我必须说现在正好找到问题我根本不使用颜色,它只是作为参数传递给另一个不使用它的函数。如果我没有将它传递给函数,那么就没有崩溃,我猜是因为它完全被优化了。
嗯,为了让事情变得更加奇怪,以下几行有效:
int color = (r & 0xFF) | ((g & 0xFF) << 8) | ((b & 0xFF) << 16) | 0xFF000000;
这在技术上应该是相同的。进一步的测试产生了以下结果:如果第一个版本中的a < 64
- &gt;没有崩溃。如果a >= 64
- >崩溃。
并且要完成混淆:int a = rnd.nextInt(255);
每次使用第一个版本时,值>&gt; = 64。
/编辑: 另一个版本没有崩溃:
int r = rnd.nextInt(255);
int g = rnd.nextInt(255);
int b = rnd.nextInt(255);
int a = 0xFF.toInt();
int color = (r & 0xFF) | ((g & 0xFF) << 8) | ((b & 0xFF) << 16) | ((a & 0xFF) << 24);
/ EDIT2: 我在项目上打开了一个问题,为了保持同步,这里有链接:https://code.google.com/p/dart/issues/detail?id=16633
我只是没有看到某些东西,或者这是不是很不受欢迎的行为?