Надоело каждый раз писать скрипты анимации для каждой программы... Решил сделать универсальный класс для плавной анимации объектов, а именно изменения их размеров и позиции
Этот код надо положить в скрипты, иначе... BCompiler будет ругаться на класс в классе...
все параметры статического метода resize::resize_object(...) кроме объекта могут быть равны FALSE, и этот параметр объекта не будет изменен. Так же есть глобальное значение скорости, если параметр = FALSE. Но для каждого объекта его можно менять.
Ну, и пример. Куда же без него :)
PHP код:
/*
================================================
= ### ##### ### ##### ##### ##### ### =
= # # # # # # # # # # =
= ### ##### # # # ##### ### =
= # # # # # # # # # =
= # # # # # # # # # =
= # # ##### ### ##### ##### ##### # # =
================================================
###################################################
############# Resizer V0.1 by kurandx #############
###################################################
Использование класса:
{ ... } Если установить false, то свойство не будет учитываться
resize::resize_object(Объект, {Функция*}, {скорость**}, {задать w}, {задать h}, {задать x}, {задать y}) - Анимировать объект, плавно переместив его в координаты
*Выполняется когда объект приехал в нужыне коордитаты
**Если FALSE то скорость по умолчанию
resize::set_speed(Скорость) - Задать скорость по умолчанию
resize::get_speed() - Возвращает скорость по умолчанию
*/
class resize{
private static $objects = array();
private static $speed = 15;
static function resize_object($obj, $func=false, $speed=false, $w=false, $h=false, $x=false, $y=false)
{
resize::$objects[$obj->self] = array($obj, array($w, $h), array($x, $y), $func, $speed);
}
static function set_speed($i)
{
resize::$speed = $i;
}
static function get_speed()
{
return resize::$speed;
}
static function tick()
{
$objs = &resize::$objects;
$s = count($objs);
if($s>0)
{
foreach($objs as $i=>$obj)
{
list($object, $wh, $xy, $func, $speed) = $obj;
$r[0] = resize::eval_formule($object->w, $wh[0]);
$r[1] = resize::eval_formule($object->h, $wh[1]);
$r[2] = resize::eval_formule($object->x, $xy[0]);
$r[3] = resize::eval_formule($object->y, $xy[1]);
if($r[0]===false&&$r[1]===false&&$r[2]===false&&$r[3]===false)
{
unset(resize::$objects[$i]);
if($wh[0]!==false) $object->w = $wh[0];
if($wh[1]!==false) $object->h = $wh[1];
if($xy[0]!==false) $object->x = $xy[0];
if($xy[1]!==false) $object->y = $xy[1];
if($func!==false && function_exists($func) ) call_user_func_array($func, array($object->self));
continue;
}
else
{
if($r[0]!==false) $object->w += $r[0];
if($r[1]!==false) $object->h += $r[1];
if($r[2]!==false) $object->x += $r[2];
if($r[3]!==false) $object->y += $r[3];
}
}
}
}
private static function eval_formule($x, $y, $speed=false)
{
if($x===false || $y===false) return false;
if($speed===false) $speed = resize::$speed;
$r = ($y-$x)/100*resize::$speed;
if($r==0) return false;
return $r>0?ceil($r):floor($r);
}
}
setTimer(5, 'resize::tick();');
все параметры статического метода resize::resize_object(...) кроме объекта могут быть равны FALSE, и этот параметр объекта не будет изменен. Так же есть глобальное значение скорости, если параметр = FALSE. Но для каждого объекта его можно менять.
Ну, и пример. Куда же без него :)