User since
2006-11-26
384
Artikel
BenutzerIn
Hallo Leute,
ich hab mal wieder eine Frage und zwar hab ich schon oefters gesehen das manche Scripts eine kleine Warteanimation haben.
Sieht so aus:
[/] => [-] => [|] => [-] => [\]
natuerlich in einem Bild und immer wechselnd. Nun frag ich mich wie man sowas anstellt. Ich weiß, dass das etwas nonsense ist, aber mich interessiert es trotzdem *g*
also wenn jemand weiß, wie man sowas darstellt kann er ja mal seine Idee posten ^^
Danke,
Rperl\n\n
<!--EDIT|RPerl|1178357514-->
User since
2006-07-05
334
Artikel
BenutzerIn
Eine Idee: die einzelnen Zeichen werden als Array gespeichert. Die einzelnen Indizes werden dann solange aufgerufen, wie das Hauptprogramm einen bestimmten Wert nicht erreicht hat.
Gruss MisterL
“Perl is the only language that looks the same before and after RSA encryption.”
User since
2003-08-04
14371
Artikel
ModeratorIn
Es gibt auch schon Module wie
Term::Progressbar, die einem da viel Arbeit abnehmen.
User since
2003-11-28
3645
Artikel
ModeratorIn
Der Trick ist einfach ein
User since
2006-07-10
2611
Artikel
BenutzerIn
Ein kleines Belspiel wie man das machen kann. Ich benutze hier "fork" um die eigendliche Animation durch zu führen und "SIGUSR1" um einen Fortschrittsbalken zu realisieren.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use strict;
use warnings;
my $guipid=fork();
unless($guipid)
{
my @rotation=qw(/ - \ |);
my $pos=0;
my $del="\x08";
$|=1;
$SIG{USR1}=sub{ print $del,'.',$rotation[$pos]; };
while(1)
{
print $del,$rotation[$pos];
select(undef, undef, undef, 0.15);
$pos++;
$pos=0 if($pos >= @rotation);
}
exit(0);
}
for (0..10)
{
kill('USR1',$guipid);
sleep(2);
}
kill(1,$guipid);
waitpid($guipid,0);
print "\n";
exit(0);
User since
2006-11-26
384
Artikel
BenutzerIn
Heftig. Sehr tricky, topeg! :D
Hab aber deinen code mal etwas angepasst:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use strict;
unless(0)
{
my @rotation = qw(/ - \ |);
my $pos = 0;
my $del = "\x08";
$| = 1;
sub { print $del,'.',$rotation[$pos]; };
while(1)
{
print $del,$rotation[$pos];
select(undef, undef, undef, 0.10);
$pos++;
$pos=0 if($pos >= @rotation);
}
exit(0);
}
exit(0);
dein code war so komplex