Делать с утреца было совершенно нечего :-) решил попробовать реализовать спрайтовую анимацию... дээсные игроделы, специально для вас ^_^
Картинка из примера (файл "hero_1.png"):
![]()
Скрипт проекта:
Картинка из примера (файл "hero_1.png"):

Скрипт проекта:
Скрытый текст:
PHP код:
c("Form1")->doubleBuffered = true; // что-бы не было мерцаний
$sprite_img = "hero_1.png"; // это наша спрайтовая картинка
$sprite_width = 64; // ширина одного "кадра" - картинки
$sprite_height = 70; // высота картинки
$sprite_count = 8; // кол-во кадров
function thread_func($self) {
$args = igbinary_unserialize(gui_threaddata($self, 'args'));
// загружаем спрайт из файла
$sprite_img = imagecreatefromPNG($args['sprite_img']);
$count = -1;
while(true)
{
$count < $args['sprite_count'] - 1 ? $count++ : $count = 0;
// создаем прозрачное изображение
//
// п.с. возможно можно как-то вынести этот участок кода из цикла
// и копировать ресурс, чтобы не вызывать кучу функций =)
$sprite = imagecreatetruecolor($args['sprite_width'], $args['sprite_height']);
imagealphablending($sprite, false);
$color = imagecolorallocatealpha($sprite, 255, 255, 255, 127);
imagefilledrectangle($sprite, 0, 0, $args['sprite_width'], $args['sprite_height'], $color);
imagealphablending($sprite, true);
imagesavealpha($sprite, true);
// вырезаем нужный "кадр"
imagecopyresampled($sprite, $sprite_img, 0, 0, $args['sprite_width'] * $count, 0, $args['sprite_width'], $args['sprite_height'], $args['sprite_width'], $args['sprite_height']);
// выводим
ob_start();
imagepng($sprite);
$str = ob_get_clean();
// устанавливаем картинку
$args["image1"]->picture->loadFromStr($str, 'png');
ImageDestroy($sprite);
usleep(100000);
}
}
// создаем картинку для будущего персонажа
$image = new TImage();
$image->x = 5;
$image->y = 40;
$image->w = $sprite_width;
$image->h = $sprite_height;
$image->parent = c("form1");
$args['image1'] = $image;
$args['sprite_img'] = $sprite_img;
$args['sprite_width'] = $sprite_width;
$args['sprite_height'] = $sprite_height;
$args['sprite_count'] = $sprite_count;
$args['sprite'] = $sprite;
// создаем поток
// p.s. не получилось завести поток без глобалки ;-(
global $th;
$th = gui_threadcreate();
gui_threaddata($th, 'args', igbinary_serialize($args));
event_set($th, 'onExecute', 'thread_func');
$b1 = new TBitBtn();
$b1->w = 80;
$b1->h = 25;
$b1->x = 5;
$b1->y = 5;
$b1->text = "run";
$b1->parent = c("form1");
$b1->onMouseDown = function() {
global $th;
gui_threadresume($th);
};
$b2 = new TBitBtn();
$b2->w = 80;
$b2->h = 25;
$b2->x = 85;
$b2->y = 5;
$b2->text = "stop";
$b2->parent = c("form1");
$b2->onMouseDown = function() {
global $th;
gui_threadSuspend($th);
};