如何将一个对象叠加在另一个对象上

问题描述 投票:0回答:1

为什么云从太阳前面经过,而不是从火箭后面经过?
我相信这是因为太阳和火箭被定义为

@rocket
@Sun
;已经只用美元符号定义了云
$nuvem
.
这没有多大意义,因为树实体被
$
调用,即使云在它后面经过。

#!/usr/bin/perl

use strict;
use warnings;
use Curses;

use Term::Animation 2.0;
my $s = Term::Animation->new();
$s->color(1);

my $phrase = "Press q to exit";

my @rocket = (
q{
        ^
      /   \
     |     |
   " |     | "
  | ||     || |
  | || ,^. || |
  |_|| | | ||_|
  | ||,|_|.|| |
  |_|/ |_| \|_|
  | /  |_|  \ |
  |(___|||___)|
  /_\??^^^??/_\

},
q{
        ^
      /   \
     |     |
   " |     | "
  | ||     || |
  | || ,^. || |
  |_|| | | ||_|
  | ||,|_|.|| |
  |_|/ |_| \|_|
  | /  |_|  \ |
  |(___|||___)|
  /_\??^^^??/_\
  /|\???????/|\
 /|||\?????/|||\
},
q{
        ^
      /   \
     |     |
   " |     | "
  | ||     || |
  | || ,^. || |
  |_|| | | ||_|
  | ||,|_|.|| |
  |_|/ |_| \|_|
  | /  |_|  \ |
  |(___|||___)|
  /_\??^^^??/_\
 /|||\?????/|||\
/|||||\???/|||||\
}
        );

my @mask = (
q{
        y
      y   y
     y     y
   w y     y w
  w wy     yw w
  w wy KKK yw w
  wwwy W W ywww
  w wyWWWWWyw w
  wwwW WWW Wwww
  w W  WWW  W w
  wWWWWWWWWWWWw
  www  KKK  www


},
q{
        y
      y   y
     y     y
   w y     y w
  w wy     yw w
  w wy KKK yw w
  wwwy W W ywww
  w wyWWWWWyw w
  wwwW WWW Wwww
  w W  WWW  W w
  wWWWWWWWWWWWw
  www  KKK  www
  RYR       RYR 
 RRRRR     RRRRR
},
q{
        y
      y   y
     y     y
   w y     y w
  w wy     yw w
  w wy KKK yw w
  wwwy W W ywww
  w wyWWWWWyw w
  wwwW WWW Wwww
  w W  WWW  W w
  wWWWWWWWWWWWw
  www  KKK  www
 RYYYR     RYYYR
RRRYRRR   RRRYRRR
}
    );

my $cloud1 = q#
   .--.
 .(    )
(_   )__)
  '-'
#;

my $cloud2 = q#
   .-.
 .(  _).
(_. (___)
#;

my $cloud3 = q#
    .-.
 .-(   ).
(        )
 (_(__.___)
#;

my @sun = (q{
  \  |  /
   .---.
- |     | -
   '---'
  /  |  \
},
q{

   .---.
  |     |
   '---'

});
my $tree = q#
     ,-
    (  }
  ,^    '),
 (         }
{           )
 '-.       /,
  {         }
   -.    ,-'
     |  }
     | |
     | |
  .-'   '-.
#;
my $tree_fg_mask = q#
     GG
    G  G
  GG    GGG
 G         G
G           G
 GGG       GG
  G         G
   GG    GGG
     K  G
     K K
     K K
  KKK   KKK
#;
$s->new_entity(
    shape           => $cloud1,
    position        => [ 2, 1, 10],
    callback_args   => [1,0,0,0],
    wrap            => 1,
    default_color   => 'WHITE',
    auto_trans      => 1,
);
$s->new_entity(
        shape           => $cloud2,
        position        => [ 10, 5, 10],
        callback_args   => [1,0,0,0],
        wrap            => 1,
        default_color   => 'WHITE',
        auto_trans      => 1,
);

$s->new_entity(
        shape           => $cloud3,
        position        => [ 15, 1, 10],
        callback_args   => [1,0,0,0],
        wrap            => 1,
        default_color   => 'WHITE',
        auto_trans      => 1,
);

$s->new_entity(
        shape           => \@sun,
        position        => [ 60, 2, 20],
        callback_args   => [-1,0,0,1],
        wrap            => 1,
        default_color   => 'YELLOW',
);
my @launch;
        push(@launch, [0,0,0,0]) for(1..10);
        push(@launch, [0,0,0,1]) for(1..3);
        push(@launch, [0,-.25,0,1]) for(1..10);
        push(@launch, [0,-.5,0,2]) for(1..10);
        push(@launch, [0,-1,0,2]) for(1..30);
$s->new_entity(
                shape           => \@rocket,
                position        => [50, 12, 15],
                callback_args   => [0, [@launch]],
                wrap            => 1,
                color           => \@mask,
                auto_trans      => 1,
        );
$s->new_entity(
        shape           => $tree,
        position        => [ 35, 5, 5],
        color           => $tree_fg_mask,
        auto_trans      => 1,
);
halfdelay( 2 );

for(1..500) {
  $s->animate();
  my $in = lc( getch() );
  if($in eq 'q') { last; }
}
perl curses
1个回答
1
投票

位置有三个坐标,第三个是z坐标。

        z
       --
tree    5   Front
cloud1 10
cloud2 10
cloud3 10
rocket 15
sun    20   Back

如果你想让火箭在云的前面,改变它们的相对 z 坐标。例如,您可以将火箭的 z 更改为 8。

© www.soinside.com 2019 - 2024. All rights reserved.