Schrift
[thread]7847[/thread]

OO-Button-Modul: für SDL (ab geht um OO) (Seite 2)

Leser: 1


<< |< 1 2 3 4 >| >> 38 Einträge, 4 Seiten
renee
 2006-04-03 12:55
#64259 #64259
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=master,03.04.2006, 10:34]Wieso dieser Aufbau?

Code: (dl )
1
2
3
4
  for(qw(ID APP X IMG IMGHV)){
$self->{$_} = shift(@params);
}
$self->{HV} = 0;
[/quote]
Um "Platz" zu sparen. Ich bin grundsätzlich schreibfaul ;) Du kannst es auch ausführlich machen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2006-04-03 12:58
#64260 #64260
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dein $self ist etwas anderes als mein $self Bei Deiner new-Methode musst Du die Zuweisungen nach der Deklaration von $Referenz machen und $self durch $Referenz ersetzen! Und natürlich auch der Methodenaufruf muss geändert werden. Hast Du mal mein Modul als ganzes probiert?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2006-04-03 13:01
#64261 #64261
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
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
35
36
37
38
39
40
Aufruf:
$SimpleButton = SimpleButton->new($id,$app,(65*$x),(25*$i),$img,$img2);


MODUL:

sub new {
my $self = shift;


my $Referenz = {};


$Referenz->{ID} = shift;
$Referenz->{APP} = shift;
$Referenz->{X} = shift;
$Referenz->{Y} = shift;
$Referenz->{IMG} = shift;
$Referenz->{IMGHV} = shift;
$Referenz->{HV} = 0;

bless($Referenz,$self);



print " -- ",$Referenz->{IMG}," ---";
$Referenz->draw($Referenz->{IMG});


return($Referenz);
}




sub draw
{
my ($self, $img) = @_;
print "IMG: $img";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
master
 2006-04-03 13:11
#64262 #64262
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Ok, klappt nun..

Hatte ganz oben ein
Code: (dl )
my $SimpleButton = SimpleButton->new();

stehen.. *nerv* das war der Grund :-(((
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
master
 2006-04-03 13:16
#64263 #64263
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/perl
package SimpleButton;


sub new {
my ($class,@params) = @_;
my $self = {};
bless($self,$class);

#for(qw(ID APP X Y IMG IMGHV)){$self->{$_} = shift(@params);}

$self->{ID} = shift(@params);
$self->{APP} = shift(@params);
$self->{X} = shift(@params);
$self->{Y} = shift(@params);
$self->{IMG} = shift(@params);
$self->{IMGHV} = shift(@params);
$self->{HV} = 0;


$self->draw($self->{IMG});
return($self);
}





sub draw
{
my ($self, $img) = @_;

my $frame_rect = SDL::Rect->new(-height => $img->height(),-width => $img->width(),-x => 0, -y => 0);
my $dest_rect = SDL::Rect->new(-height => $img->height(),-width => $img->width(),
-x => $self->{X},-y => $self->{Y},);


$img->blit( $frame_rect, $self->{APP}, $dest_rect );
$self->{APP}->update( $dest_rect );
$self->{APP}->flip;
}






sub check
{
my $self = shift;
my $mx = shift;
my $my = shift;
my $event = shift;

my $img = $self->{IMG};

#Hover - Effekt
if($mx > $self->{X} && $mx < ($self->{X}+ $img->width) && $my > $self->{Y} && $my < ($self->{Y}+ $img->height) )
{
if(not $self->{HV}) {$self->{HV}=1; $self->draw($self->{IMGHV});}
if($event->button eq 1 ) {return $self->{ID};}
} else
{
if($self->{HV}) {$self->{HV}=0; $self->draw($self->{IMG});}
return 0;
}

}



1;




Aufruf:
Code: (dl )
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
use FindBin qw($Bin); chdir($Bin);

use lib $FindBin::Bin . '/LIBS';
use SimpleButton; #in zusätzlichen sub dir "X", daher X::


use SDL;
use SDL::App;
use SDL::Event;
use SDL::Surface;
use SDL::Color;
use SDL::Rect;

my $app = SDL::App->new(
-width => 730,
-height => 430,
-depth => 16,
);



$img = SDL::Surface->new( -name => 'x.png' );
$img2 = SDL::Surface->new( -name => 'x_on.png' );


#Button hinzufügen...
for my $i (0..15)
{
for my $x (0..10)
{
$id++;
push(@butts, SimpleButton->new($id,$app,(65*$x),(25*$i),$img,$img2) );
}
}






$event = new SDL::Event();

while(1)
{
# process event queue
$event->pump;
$event->poll;
my $etype=$event->type;

# handle user events
last if ($etype eq SDL_QUIT );
last if (SDL::GetKeyState(SDLK_ESCAPE));

for(@butts)
{
my $click = $_->check($event->button_x,$event->button_y,$event);
if($click ne 0 ) {print "\r ",$click," ";}

}


}
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
renee
 2006-04-03 14:13
#64264 #64264
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Warum schreibst Du eigentlich ne Shebang in das Modul?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
master
 2006-04-03 15:12
#64265 #64265
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Macht der Gewohnheit...
Kommt natürlich noch raus :-)

Habe nun mal bischen etwas weitergemacht und die Abfrage
in das Modul implementiert.

Nun müssen die funktionen Hover
Nur mit der Sub gibts noch ärger...

Wenn man auf den Button geklickt hat, soll eine Sub, die der User definiert ausgeführt werden...

Auch das Klick-Event muss ich ja eigentlich gar nicht mitübergeben...
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
master
 2006-04-03 15:43
#64266 #64266
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Funktioniert nun relativ gut...

Modul-Komplett:
Code: (dl )
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package SimpleButton;

#Erzeugen
sub new {
   my ($class,@params) = @_;
   my $self = {};
   bless($self,$class);
   #for(qw(ID APP X Y IMG IMGHV)){$self->{$_} = shift(@params);}

   $self->{ID} = shift(@params);              &n
bsp; #ID oder Name
   $self->{APP} = shift(@params);              &n
bsp; #SDL APP
   $self->{X} = shift(@params);
   $self->{Y} = shift(@params);
   $self->{IMG} = shift(@params);              &n
bsp; #IMG normal
   $self->{IMGHV} = shift(@params);            #IMG hover
   $self->{DOSUB} = shift(@params);              &n
bsp; #Button's sub
    
   $self->{HV} = 0;              &nbs
p;             #Hover state
   $self->draw($self->{IMG});              &n
bsp;     #Display

   push(@butts, $self);
   return($self);
}



#Button darstellen
sub draw
{
   my ($self, $img) = @_;
   my $dest_rect = SDL::Rect->new(-height => $img->height(),-width  => $img->width(),-x=> $self->{X},-y => $self->{Y});
   
   $img->blit( SDL::Rect->new(-height => $img->height(),-width  => $img->width(),-x => 0, -y  => 0), $self->{APP}, $dest_rect );
   $self->{APP}->update( $dest_rect );
}



#Alle Elemente Prüfen
sub checkall
{
   my ($self, $mx, $my) = @_;
   for(@butts) { if($_->check_button($mx,$my)){$active_element = $_;} }
   return $active_element;    
}



#Sub zurückgeben
sub dosub
{ my $self = shift; return $self->{DOSUB}; }


sub get
{
    my $self = shift;
    my $values = shift;
    return $self->{"$values"};
}


sub check_button
{
   my ($self, $mx, $my) = @_;

   my $img = $self->{IMG};

   #Hover - Effekt
   if($mx > $self->{X} &&  $mx < ($self->{X}+ $img->width)  && $my > $self->{Y}    &&   $my < ($self->{Y}+ $img->height) )
   {
       if(not  $self->{HV}) {$self->{HV}=1; $self->draw($self->{IMGHV});}
        return true;
   } else
   {
           if($self->{HV}) {$self->{HV}=0; $self->draw($self->{IMG});}       
   }
   return false;
}


sub button_check{}
sub button_hover{}
sub button_click{}

1;


AufrufCode Teil:
Code: (dl )
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
while(1)
{
   #process event queue
   $event->pump;
   $event->poll;
   my $etype=$event->type;

   # handle user events
   last if ($etype eq SDL_QUIT );
   last if (SDL::GetKeyState(SDLK_ESCAPE));

   $checked = SimpleButton->checkall($event->button_x,$event->button_y);
    
    print "\r   ",$checked->get('ID'),"   ";

   if($event->button eq 1)
   {
       &{$checked->dosub()}($checked);
   }
}

#Button Event
sub loslos
{
    my $self = shift;
    print "\r   ",$self->get('ID'),"   ";
}
\n\n

<!--EDIT|master|1144065429-->
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
master
 2006-04-03 16:17
#64267 #64267
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Wie kann ich vom Modul aus auf eine Routine im Hauptskript springen?
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
Taulmarill
 2006-04-03 16:29
#64268 #64268
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
kann man schon, ist aber imho nur selten sinnvoll. gib dem entsprechenden funktionsaufruf lieber eine codereferenz mit.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
<< |< 1 2 3 4 >| >> 38 Einträge, 4 Seiten



View all threads created 2006-03-31 19:08.