LINUX.ORG.RU

[perl][SDL] Странности.

 ,


0

0

Вот такой код:

#!/usr/bin/perl

use strict;
use warnings;

use SDL;
use SDL::App;
use SDL::Event;
use SDL::Color;

our $WIN_W = 640;
our $WIN_H = 480;

our $app = SDL::App->new(
                        -height=>$WIN_H,
                        -width=>$WIN_W,
                        -depth=>32,
                        -title=>'hw'
                        );

sub interface_test {
    my $color = SDL::Color -> new  (
                                    -r=>0x00,
                                    -g=>0x00,
                                    -b=>0x00
                                    );
    my $bgcolor = SDL::Color -> new(
                                    -r=>0xff,
                                    -g=>0xff,
                                    -b=>0xff
                                    );
    my $rect = SDL::Rect -> new(
                                -h=>20,
                                -w=>20,
                                -l=>($WIN_W/2),
                                -t=>($WIN_H/2)
                                );
                                
    $app -> fill(0,$bgcolor);
    $app -> fill($rect,$color);
    $app -> flip;
                                    
    my $event = SDL::Event -> new();
    while (1) {
        while ( $event->poll() ) {
            exit(0) if ( $event->type() == SDL_QUIT )
        }
    }
}

interface_test();

По-идее, скрипт должен рисовать чёрный прямоугольник посередине белого окна. Вместо этого отрисовывается прямоугольник в левом верхнем углу экрана. При добавлении строки

 print $WIN_W; 
в процедуру он выводит корректное значения, но уже после закрытия окна. Куда копать?


Объявлять $WIN_W и $WIN_H как константы пробовал - та же байда.

ivano
() автор топика
#!/usr/bin/perl 
 
use strict; 
use warnings; 
 
use SDL; 
use SDL::App; 
use SDL::Event; 
use SDL::Color; 
 
our $WIN_W = 640; 
our $WIN_H = 480; 
 
our $app = SDL::App->new( 
                        -height=>$WIN_H, 
                        -width=>$WIN_W, 
                        -depth=>32, 
                        -title=>'hw' 
                        ); 
 
sub interface_test { 
    my $color = SDL::Color -> new  ( 
                                    -r=>0x00, 
                                    -g=>0x00, 
                                    -b=>0x00 
                                    ); 
    my $bgcolor = SDL::Color -> new( 
                                    -r=>0xff, 
                                    -g=>0xff, 
                                    -b=>0xff 
                                    ); 
    my $rect = SDL::Rect -> new( 
                                -height=>20, 
                                -width=>20, 
                                ); 
    $rect->x($WIN_W/2);
    $rect->y($WIN_H/2);
                                 
    $app -> fill(0,$bgcolor); 
    $app -> fill($rect,$color); 
    $app -> flip; 
                                     
    my $event = SDL::Event -> new(); 
    while (1) { 
        while ( $event->poll() ) { 
            exit(0) if ( $event->type() == SDL_QUIT ) 
        } 
    } 
} 
 
interface_test();
iSage ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.