SDL perl-SDLX::surface应用(1)

本文将通过几个简单的示例,展示如何使用SDL和SDLx库进行游戏开发的基本步骤,包括创建窗口、绘制背景、添加动态元素如星星、月亮、树木等,并通过加载PNG图片来丰富场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

use SDL;
use SDLx::App;
my $app=SDLx::App->new(w=>400,h=>400,d=>32,t=>"我的第二个程序");
#画大地
$app->draw_rect([0,0,400,400],[0,0,100,255]);
#画夜空
my $sky=SDLx::Surface->new(width=>400,height=>200);
$sky->draw_rect([0,0,400,200],[0,0,0,255]);
#画月亮
$sky->draw_circle_filled([150,50],25,[255,255,0,255]);
#画星星
for (my $i = 1; $i < 50; $i++)
{
   my $x=int(rand(400));
   my $y=int(rand(200));
   if (not ($x>125 and $x<175  and $y >25 and $y<75))
   {
      $sky->draw_circle_filled([$x,$y],2,[0,0,200,255]);      
   }  
}
$sky->blit($app);
$app->update();
sleep(5);

 

 


 

 

 

use SDL;
use SDLx::App;
my $app=SDLx::App->new(w=>400,h=>400,d=>32,t=>"我的第二个程序");
#画大地
$app->draw_rect([0,0,400,400],[0,100,0,255]);
#随机生成大地的麻点
for (my $i = 1; $i < 500; $i++){
    $app->[int(rand(400))][200+int(rand(200))]=[10,10,10,255];
}
#画夜空
my $sky=SDLx::Surface->new(width=>400,height=>200);
$sky->draw_rect([0,0,400,200],[0,0,0,255]);
#画树
my $tree=SDLx::Surface->new(width=>400,height=>150);
for (my $i = 1; $i < 30; $i++){
    $x=int(20+rand(375));
    $y=int(15+rand(100));
    $tree->draw_circle_filled([$x,$y],15,[0,150,0,255]);
	$tree->draw_rect([$x,$y+15,2,15],[0,0,15,255]);
}
#画月亮
$sky->draw_circle_filled([150,50],25,[255,255,0,255]);
#画星星
for (my $i = 1; $i < 50; $i++)
{
   my $x=int(rand(400));
   my $y=int(rand(200));
   if (not ($x>125 and $x<175  and $y >25 and $y<75))
   {
      $sky->draw_circle_filled([$x,$y],2,[0,0,200,255]);      
   }  
}
$sky->blit($app);
$tree->blit($app,[0,0,400,150],[0,200,400,150]);
$app->update();
sleep(5);

 

 

 

读取PNG图片

use SDL;
use SDLx::App;

my $app=SDLx::App->new(w=>400,h=>400,d=>32,t=>"我的第二个程序");
#画大地
$app->draw_rect([0,0,400,400],[10,80,10,255]);
#随机生成大地的麻点
for (my $i = 1; $i < 500; $i++){
    $app->[int(rand(400))][200+int(rand(200))]=[10,10,10,255];
}
#画夜空
my $sky=SDLx::Surface->new(width=>400,height=>200);
$sky->draw_rect([0,0,400,200],[0,0,0,255]);

#画月亮
$sky->draw_circle_filled([150,50],25,[255,255,0,255]);
#画星星
for (my $i = 1; $i < 50; $i++)
{
   my $x=int(rand(400));
   my $y=int(rand(200));
   if (not ($x>125 and $x<175  and $y >25 and $y<75))
   {
      $sky->draw_circle_filled([$x,$y],2,[0,0,200,255]);      
   }  
}
$sky->blit($app);
#画树
for (my $i = 1; $i < 20; $i++){
    $x=int(rand(350));
    $y=150+int(rand(100));
    my $tree=SDL::Image::load('tree.png');
	$tree= SDLx::Surface->new(surface =>$tree);
    $tree->blit($app,[0,0,100,133],[$x,$y,100,133]);	
}
$app->update();
sleep(5);

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值