Просмотр полной версии : Неравномерное вращение....
Сделал глобус, но вращение получается не равномерным сначала медленно потом оч. быстро и снова медленно......пробовал увеличить кол-во кадров вроде равномерно получается, но тогда видно , как подергивает картинку при переходе, может програмно можно сделать как-нить?
Оч много весит могу частями.....
Кто-нить подскажите как програмно цеплять до маски и удалять после?
2 repz:
До и после? Маску можно назначить для мувиклипа...
2 Хемуль:
Можно, но как програмно подцепить клип, а потом удалить, что бы задержки и поддергивания картинки не было?
2 repz:
У вас изменение скорости происодит потому, что вы сами такой мувиклип сделали. Если бы анимация была программной, такого бы очно не было.
Чтобы прицепить мувиклип, используйте attachMovie, чтобы удалить - removeMovieClip. Клип с картой цепляйте к какому-нибудь клипу контейнеру, на который наложена круглая маска.
Спасиб, а если маленький примерчик? Буду благодарен....
2 repz:
Я бы вам и ваш пример сделал, но позже...
2repz =)
Держи свой глобус : ) звезды рисовать будем ? :)
Читай внимательно :
_root.planeta._x = 324;
_root.planeta._y = 108;
в этих строчках находятся координаты расположения основного ролика на сцене , меняеш их меняешь расположение твоей планеты на сцене , другое ничего нетрогай =)
далее :
this.moves.bmp0._x -= 1;
this.moves.bmp1._x -= 1;
здесь задаем скорость вращения , еденичка и есть параметр скорости , можеш поставить другую скорость какая наиболее приемлима для твоего проекта , ах вот еще у обоих роликов скорость должна быть одинакова .
Удачи , если что спрашивай =)
P.S.
Квейк 4 =)
import flash.display.*;
////
this.createEmptyMovieClip("planeta", this.getNextHighestDepth());
this.planeta.createEmptyMovieClip("moves", this.getNextHighestDepth());
//
for (var i:Number = 0; i<=1; i++) {
this.planeta.moves.createEmptyMovieClip("bmp"+i, i);
var myBitmapData:BitmapData = BitmapData.loadBitmap("pic");
this.planeta.moves["bmp"+i].attachBitmap(myBitmapData, i);
this.planeta.moves["bmp"+i]._width = 432;
this.planeta.moves["bmp"+i]._height = 216;
}
this.planeta.moves.bmp0._x = -216;
this.planeta.moves.bmp0._y = -108;
//
this.planeta.moves.bmp1._x = 216;
this.planeta.moves.bmp1._y = -108;
////
this.planeta.attachMovie("mask", "mask1", 2, {_x:216, _y:216});
this.planeta.mask1._width = this.planeta.mask1._height=216;
this.planeta.mask1._x = -108;
this.planeta.mask1._y = 0;
this.planeta.moves.setMask(this.planeta.mask1);
//
_root.planeta._x = 324;
_root.planeta._y = 108;
////
this.planeta.onEnterFrame = function() {
this.moves.bmp0._x -= 1;
this.moves.bmp1._x -= 1;
if (this.moves.bmp0._x<=-648) {
this.moves.bmp0._x = 216;
}
if (this.moves.bmp1._x<=-648) {
this.moves.bmp1._x = 216;
}
};
2 repz:
Я немного переделал вашу флешку. Посмотрите, что у вас в библиотеке.
Сделал так, что карта масштабируется по размеру круглой маски.
Код:
var mainContainerClipName:String = "map";
var mapContainerClipName:String = "mapContainer";
var mapMaskClipName:String = "mask";
var mapClipBaseName:String = "map";
var left:Number = 100;
var top:Number = 100;
var speed:Number = -1;
var mapCounter:Number = 0;
var mainContainerClip:MovieClip = this.createEmptyMovieClip(mainContainerClipName, this.getNextHighestDepth());
var mapContainerClip:MovieClip = mainContainerClip.createEmptyMovieClip(mapContainerClipName, mainContainerClip.getNextHighestDepth());
var mapMaskClip:MovieClip = mainContainerClip.attachMovie("mapMask", mapMaskClipName, mainContainerClip.getNextHighestDepth());
mapContainerClip.setMask(mapMaskClip);
addNewMap(0);
function addNewMap(newMapX:Number)
{
var mapClipName:String = mapClipBaseName + mapCounter;
var mapClip:MovieClip = mapContainerClip.attachMovie("map", mapClipName, mapContainerClip.getNextHighestDepth(), {_x:newMapX});
var mapScale:Number = (mapMaskClip._height / mapClip._height) * 100;
mapClip._xscale = mapScale;
mapClip._yscale = mapScale;
mapClip.id = mapCounter;
mapClip.onEnterFrame = function()
{
this._x += speed;
if (this._x + this._width < this._parent._parent[mapMaskClipName]._width && this._parent[mapClipBaseName + (this.id + 1)] == undefined)
{
addNewMap(this._x + this._width);
}
if (this._x + this._width < 0)
{
this.removeMovieClip();
}
};
mapCounter++;
}
Исходник прикрепляю...
Хемуль, D12 спасибо огромное с кодом вроде чуть разобрался, но вот вопрос, размер маски уменьшил например до 94*94, а вот картинку как подогнать не наю, не получается все съезжает?
this.planeta.attachMovie("mask", "mask1", 2, {_x:94, _y:94});
this.planeta.mask1._width = this.planeta.mask1._height=94;
this.planeta.mask1._x = -108;
this.planeta.mask1._y = 0;
this.planeta.moves.setMask(this.planeta.mask1);
это у D12,
Хемуль, а как у тя изменить положение на сцене?
Так:
_root.map._x = 200;
_root.map._y = 50;
В моём примере положение и размеры изменяются достаточно просто. Жирным выделено то, что изменилось:
var mainContainerClipName:String = "map";
var mapContainerClipName:String = "mapContainer";
var mapMaskClipName:String = "mask";
var mapClipBaseName:String = "map";
var mainContainerLeft:Number = 100;
var mainContainerTop:Number = 100;
var mainContainerWidth:Number = 94;
var mainContainerHeight:Number = 94;
var speed:Number = -1;
var mapCounter:Number = 0;
var mainContainerClip:MovieClip = this.createEmptyMovieClip(mainContainerClipName, this.getNextHighestDepth());
var mapContainerClip:MovieClip = mainContainerClip.createEmptyMovieClip(mapContainerClipName, mainContainerClip.getNextHighestDepth());
var mapMaskClip:MovieClip = mainContainerClip.attachMovie("mapMask", mapMaskClipName, mainContainerClip.getNextHighestDepth());
mainContainerClip._x = mainContainerLeft;
mainContainerClip._y = mainContainerTop;
mainContainerClip._width = mainContainerWidth;
mainContainerClip._height = mainContainerHeight;
mapContainerClip.setMask(mapMaskClip);
addNewMap(0);
function addNewMap(newMapX:Number)
{
var mapClipName:String = mapClipBaseName + mapCounter;
var mapClip:MovieClip = mapContainerClip.attachMovie("map", mapClipName, mapContainerClip.getNextHighestDepth(), {_x:newMapX});
var mapScale:Number = (mapMaskClip._height / mapClip._height) * 100;
mapClip._xscale = mapScale;
mapClip._yscale = mapScale;
mapClip.id = mapCounter;
mapClip.onEnterFrame = function()
{
this._x += speed;
if (this._x + this._width < this._parent._parent[mapMaskClipName]._width && this._parent[mapClipBaseName + (this.id + 1)] == undefined)
{
addNewMap(this._x + this._width);
}
if (this._x + this._width < 0)
{
this.removeMovieClip();
}
};
mapCounter++;
}
Переменные mainContainerLeft, mainContainerTop, mainContainerWidth, mainContainerHeight задают положение верхнего левого угла контейнера (прямоугольника, в который вписана планета по сути), его ширину и высоту.
Но учтите, что у вас карта - большая картинка при уменьшении и движении она "серебрится". Поэтому, если необходимо использовать только маленькую такую маленькую планету, уменьшите лучше ещё кратинку в библиотеке.
Ок спасибо, понял. Вот снова проблем этот код не работает из под цикла, т.е. что-то там if { далее код...... - не работает! Возможна ли обработка в цикле этого кода вообще?
2 repz:
В цикле нет. Извините, можете подробнее о своей задаче? Зачем вам эти проверки и циклы? Может я вам подскажу более рациональное решение в рамках готового...
У мя по задумке два шарика (глобуса) один ночной другой утренний, как бы, потом идет проверка на время и в зависимости от этого показывается один или другой.
P.S. Если сделать из глобуса mc то все заработает? по идее.
P.S. Ну да так и есть в мувик загнать, а потом через визибл настроить :-)))) или есть еще варианты??
2 repz:
А чем "ночной" глобус отличается от дневного?
PS:
Прокручивающаяся карта, и круглая маска для неё и так находятся в мувиклипе, ссылка на который хранится в переменной mainContainerClip.
То есть, смотрите, как всё работает. Есть один общий мувиклип-контейнер. Его координаты и размеры определяют размеры глобуса. Внутри этого главного контейнера есть два мувиклипа - контейнер для прокручивающейся карты и маска для него. Внутри мувиклипа-контейнера для карт двигаются прикреплённые из библиотеки мувиклипы карт. ^_^
С этим разобрался, но время то как определять в любом случае через цикл.
2 repz:
Вот по поводу определения времени суток:
http://flasher.ru/forum/showthread.php?t=86278
Осталось только изменить что-то в глобусе.
Так всё же, чем "ночной" глобус отличается от дневного?
Спасибо за линк на мой вопрос :-)))))
Изменилась картинка - она другая просто, но терь вопрос другой, индефикатор map - уникальный и если поменять на map1 скажем, то работать не буит все равно, что сделать нужно, т.е. создаем два мувика с разными картинками (1.jpg, 2.jpg), маской (mask), и картой map (map, map1), но не работает.
2 repz:
Создаём два мувиклипа в библиотеке - в каждом свой рисунок карты. Назначаем им разные идентификаторы в библиотеке и вытягиваем ту карту, которая нам нужна.
В том-то и дело, что
**Warning** The linkage identifier 'map' was already assigned to the symbol 'map2', and cannot be assigned to the symbol 'map', since linkage identifiers must be unique. ругается на "map"
2 repz:
Ну так сделайте два уникальных linkage identifier'а для двух мтиволов в библиотеке: для дневного и ночного глобуса.
То есть, символ дневного глобуса, например, пусть имеет linkage identifier "map1",а ночной - "map2"...
2 Хемуль:
Так сделал не работает.. есть map и map2 в скрипте соответственно меняю
var mainContainerClipName:String = "map2";
var mapContainerClipName:String = "mapContainer";
var mapMaskClipName:String = "mask";
var mapClipBaseName:String = "map2";
Битый час бьюсь не могу понять почему
P.S. Заработалоо о о о о................
Хемуль- -огромное спасибо
2 repz:
ПРиведите, пожалуйста участок кода... Я, наверное, домой приду и вечером постараюсь сделать вам этот пример. Вы вот только скажите, как надо сделать: чтобы проверка на время происходила только при загрузке флешки на странице или даже тогда, когда уже флешка загружена? То есть, пользователь загружает страницу с флешкой, сидит и не перезагружает её 5 часов, например. И в это время начинается "ночь", флешка меняется без перезагрузки?
Если возможно сделать так что бы даже без перезагрузки флеш менялся, то буду оч благодарен.
day_mc._visible=false;
ni_mc._visible=false;
time = new Date();
time_th = time.getHours();
if (time_th >= 4 && time_th <= 18)
{
day_mc._visible = true;
} else {
ni_mc._visible = true;
day_mc._visible = false;
}
Давай сюда свою ночную картинку =) сделаем ее с часами : )
2 D12:
Так выше постом все изложенно ж :-))) работает все нормально, но для изменения с 1 глобуса на другой, если время подошло нужно перезагружать страницу, Хемуль говорит, что можно без перезагрузки сделать, а так код выше работает...
Хемуль говорит, что можно без перезагрузки
Нагло обманывет ...........
Делаешь скрипт с часами и в зависимости какое время они показывают в условии меняешь картинку ...
Таких примеров сотни , мода сейчас пошла на время суток =)
посмотри (http://www.flasher.ru/forum/showthread.php?t=82910&highlight=%F7%E0%F1%FB)
=)
http://www.flasher.ru/forum/showthread.php?t=81551&highlight=%F7%E0%F1%FB
Это да, хотя раньше тоже вроде была, приветствия там от времени суток, кода еще на хтмл баловался, насчет Хемуля поморим может и можно, даже наверняка можно перегружать мувик со скриптом например соответственно он новые вводные получает через setinterval например, я так думаю.
P.S. ссори не заметил ссылок (там как раз про интервал)
2 repz:
Новый код:
var mainContainerClipName:String = "map";
var mapContainerClipName:String = "mapContainer";
var mapMaskClipName:String = "mask";
var mapClipBaseName:String = "map";
var dayMapId:String = "map1";
var nightMapId:String = "map2";
var mainContainerLeft:Number = 100;
var mainContainerTop:Number = 100;
var mainContainerWidth:Number = 94;
var mainContainerHeight:Number = 94;
var speed:Number = -1;
var nightBeginHour:Number = 22;
var nightEndHour:Number = 5
var mapCounter:Number = 0;
var currentMapId:String = getNewMapId();
var mainContainerClip:MovieClip = this.createEmptyMovieClip(mainContainerClipName, this.getNextHighestDepth());
var mapContainerClip:MovieClip = mainContainerClip.createEmptyMovieClip(mapContainerClipName, mainContainerClip.getNextHighestDepth());
var mapMaskClip:MovieClip = mainContainerClip.attachMovie("mapMask", mapMaskClipName, mainContainerClip.getNextHighestDepth());
mainContainerClip._x = mainContainerLeft;
mainContainerClip._y = mainContainerTop;
mainContainerClip._width = mainContainerWidth;
mainContainerClip._height = mainContainerHeight;
mapContainerClip.setMask(mapMaskClip);
addNewMap(0);
var timer:Number = setInterval(this, "checkTime", 1000);
function addNewMap(newMapX:Number)
{
var mapClipName:String = mapClipBaseName + mapCounter;
var mapClip:MovieClip = mapContainerClip.attachMovie(currentMapId, mapClipName, mapContainerClip.getNextHighestDepth(), {_x:newMapX});
var mapScale:Number = (mapMaskClip._height / mapClip._height) * 100;
mapClip._xscale = mapScale;
mapClip._yscale = mapScale;
mapClip.id = mapCounter;
mapClip.onEnterFrame = function()
{
this._x += speed;
if (this._x + this._width < this._parent._parent[mapMaskClipName]._width && this._parent[mapClipBaseName + (this.id + 1)] == undefined)
{
addNewMap(this._x + this._width);
}
if (this._x + this._width < 0)
{
this.removeMovieClip();
}
};
mapCounter++;
}
function getNewMapId():String
{
var myDate:Date = new Date();
if ((myDate.getHours() < nightEndHour) || (myDate.getHours() >= nightBeginHour))
{
return nightMapId;
}
else
{
return dayMapId;
}
}
function checkTime()
{
var newMapId:String = getNewMapId();
if (currentMapId != newMapId)
{
var currentMapClipName:String = mapClipBaseName + (mapCounter - 1);
var previousMapClipName:String = mapClipBaseName + (mapCounter - 2);
var currentMapClip:MovieClip = mapContainerClip[currentMapClipName];
var previousMapClip:MovieClip = mapContainerClip[previousMapClipName];
var currentMapClipX:Number = currentMapClip._x;
var previousMapClipX:Number = previousMapClip._x;
currentMapId = newMapId;
if (previousMapClip != undefined)
{
previousMapClip.removeMovieClip();
addNewMap(previousMapClipX);
}
currentMapClip.removeMovieClip();
addNewMap(currentMapClipX);
}
}
Задаётся начальный час ночи и час, который уже с утра ночью не является (конец ночи). При загрузке флешки ставится необходимая карта и каждую секунду производится проверка времени. Если меняется время суток (ночь/день), текущие полоски карт удаляются, а на их место ставятся "противоположные".
Обязательно посмотрите новую флешку, которую я прикрепляю. Я в библиотеке уменьшил картинку, чтобы она меньше занимала. Если будут вопросы, пишите.
И ещё удалите строку trace(newMapX); из кода флешки. Она там не нужна. Я просто забыл удалить,а перезакачивать архивы лень. ^_^
2 D12:
Вообще я говорил о перезагрузке всей флешки. Но даже если говорить о мувиклипе карты, который движется под круглой маской, его тоже можно не перезагружать из библиотеки. Просто в библиотеке создаётся мувиклип из двух кадров. На кадрах дневная и ночная карты. В случае перехода на другую часть дня просто меняется кадр мувиклипа. Ну и что, я врал? Или это в вас опять говорит предвзятое отношение ко мне и моим примерам? ^_^
2 Хемуль:
Разбираюсь......, что не пойму спрошу!
P.S. Спасиб
2 Хемуль:
Что т не пойму где идет проверка через интервал? видимо здесь:
var timer:Number = setInterval(this, "checkTime", 1000);, но как ее прикрутит вот сюда:
var nightBeginHour:Number = 22;
var nightEndHour:Number = 5;
day_mc._visible = false;
ni_mc._visible = false;
var myDate:Date = new Date();
if ((myDate.getHours() < nightEndHour) || (myDate.getHours() >= nightBeginHour))
{
ni_mc._visible = true;
}
else
{
day_mc._visible = true;
}
2 repz:
А зачем её туда прикручивать? Тот скрипт, который я вам выше привёл, производит проверку на время и меняет карты. То есть, больше никаких проверок не надо. Я поставил такие настройки, что ночь начинается в 22 часа и заканчивается в 5. Вот запустите эту флешку и попробуйте системное время поменять в операционной системе. Поставьте сперва, например, 21 час, а потом 22. Увидите, как меняется глобус в реальном времени...
2 Хемуль
Да нет же, с той флешкой я разобрался, что да как просто хочу попрактиковаться немного и понять как что по отдельности использовать или по другому не так как я раньше делал. Вот и спрашиваю из Вашего же примера как туда прикрутить проверку через интервал?
Я на интервал повесил функцию checkTime. Вот её начало:
function checkTime()
{
var newMapId:String = getNewMapId();
if (currentMapId != newMapId)
То есть, мы в переменную newMapId заносим результат функции getNewMapId(), которая и производит проверку на часы. Потом в теле checkTime() идёт проверка, которая проверяет, изменилась ли требуемая карта. Таким образом отлавливается момент перехода через часовой барьер ночи.
Сама же функция проверки и выбора необходимого linkage Id'а библиотеки для мувиклипа карты выглядит так:
function getNewMapId():String
{
var myDate:Date = new Date();
if ((myDate.getHours() < nightEndHour) || (myDate.getHours() >= nightBeginHour))
{
return nightMapId;
}
else
{
return dayMapId;
}
}
2 Хемуль:
Спсб, буду пробовать.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.