在鼠标单击时,我投影光线以查看哪些对象与点击相交.我有一堆Mesh对象可以使用.但是,当我将Sprite添加到对象列表时,从未检测到Sprite.
1)应该检测精灵吗?有什么东西让它们无法被发现吗?我需要做些什么来使它们看起来"稳固"吗?2)如果无法检测到Sprites,那么使它们可点击的最佳方法是什么?在他们周围添加隐形圆筒?
这是一些适用于Mesh的部分代码.
var containerPosition = $container.position();
var vector = new THREE.Vector3(((event.clientX - containerPosition.left) / scene.WIDTH) * 2 - 1, - ((event.clientY - containerPosition.top) / scene.HEIGHT) * 2 + 1, 0.5);
new THREE.Projector().unprojectVector(vector, scene.camera);
var ray = new THREE.Ray(scene.camera.position, vector.subSelf(scene.camera.position).normalize());
var intersects = ray.intersectObjects(scene.solidObjects);
if (intersects.length > 0) {
Run Code Online (Sandbox Code Playgroud) 给下面的代码,似乎您实例化对象的顺序很重要。当我希望每个对象都使用不同的列表时,以下代码将为两个对象打印相同的列表,因为列表是在构建时创建的实例属性。
package t;
use Moo;
use Types::Standard qw(ArrayRef);
my @list = qw/foo bar baz/;
has list => (
is => 'rw',
isa => ArrayRef,
default => sub {\@list}
);
1;
---
package u;
use Moo;
use Types::Standard qw(ArrayRef);
extends 't';
sub BUILD {
my ($self) = @_;
push @{$self->list()}, qw/apple banana/;
return $self;
}
1;
---
#!perl
use Data::Printer;
use t;
use u;
my $u = u->new();
p $u->list();
my $t = t->new();
p $t->list();
Run Code Online (Sandbox Code Playgroud)
电流输出:
\ [
[0] "foo", …Run Code Online (Sandbox Code Playgroud)