PDA

View Full Version : طراحی نوار منوی متحرک بدون وقفه



kathy11ir
چهارشنبه 17 خرداد 1385, 08:02 صبح
سلام!

من یک صفحه فلش طراحی کردم که دارای منوی متحرک می باشد . اندازه این نوار منو که در فتوشاب طراحی کردم و به فلش منتقل کردم 160cm می باشد . در ابتدا 250 فریم درفلش در نظر گرفتم اما این نوار با وقفه اجرا می شد (یعنی زمانیکه از یک فریم به یک فریم دیگر می خواهد برود در چند صدم ثانیه یک وقفه ایجاد می شود) افزایش سرعت هم کمکی به من نکرد چون اطلاعات ناخوانا می شد. من تعداد فریم ها را تا 1000 افزایش دادم یعنی 1250 فریم شد .مقدار وقفه ها کم شد اما به طور کامل از بین نرفت من حتی تا 5000 فریم هم افزایش دادم و سرعت هم زیاد کردم اما باز هم مشکل من رفع نشد . لطفا" راهنمایی کنید چگونه می توان وقفه بین فریم ها را از بین ببرم و نوار منوی من به صورت روان به حرکت درآید ؟

متشکرم

Hamid_PaK
چهارشنبه 17 خرداد 1385, 08:17 صبح
دقیقا متوجه موضوع نشدم !!! چطور وقفه ای ؟؟؟

kathy11ir
چهارشنبه 17 خرداد 1385, 12:51 عصر
سلام!
منظور من این بود که این نوار به صورت روان از راست به چپ حرکت نمی کند .وقتی به صفحه نمایش نگاه می کنین حرکت آن را و توقف چند صدم ثانیه ای آن را می توانید تشخیص می دهید .
در ضمن باید بگویم که با کاهش و یا افزایش سرعت این مشکل حل نمی گردد .

مثال: حالت روان : ---------------
حالت همراه با وقفه : ---- ---- ---- ----

در ضمن می خواستم ببینم راهی وجود دارد که در وسط راه مسیر حرکت نوار که از سمت راست به چپ می باشد ، با یک کلیک از سمت چپ به راست حرکت کند .

متشکرم

Noob-Saibot
چهارشنبه 17 خرداد 1385, 15:25 عصر
با سلام به تو.
می تونی یه کار بکنی. این جور که من فهمیدم در حرکت یه خورده مشکل داری. تمام حرکت ها رو پاک کن و از اول بساز. درست می شه. ( فکر کنم البته ولی امتحان کن ). خبرش رو به من هم بده.

kathy11ir
چهارشنبه 17 خرداد 1385, 19:14 عصر
فایده ندارد من بارها این کاررا کردم ولی نتوانستم آن را درست کنم .
لطفا در صورت امکان سایت زیر را ببینید و بگویید چطوری یک نوار ابزار مثل آن درست کنم .
http://www.dynamicfactory.us/xmlswf/timeline3/index.html

ممنون

Hamid_PaK
پنج شنبه 18 خرداد 1385, 04:54 صبح
طراحی یه چیزی توی مایه های همون سایتی که گفتی بسیار ساده است ...
کمی صبر کنی یک مثال آماده و ضمیمه می کنم ...

یا حق ...

kathy11ir
پنج شنبه 18 خرداد 1385, 11:58 صبح
سلام !

من به راهنمایی شما هر چه سریعتر نیاز دارم .

Hamid_PaK
پنج شنبه 18 خرداد 1385, 16:20 عصر
پس ببین این بدردت می خوره تا یک مثال ضمیمه کنم ...


stop ();
move = true;
pY = 180;
amount = 14;
pDist = 15;
pWidth = 150;
totalWidth = amount * pWidth + (amount - 1) * pDist;
leftPoint = -(totalwidth - 550) / 2;
rightPoint = 550 + (totalwidth - 550) / 2;
for (i = 1; i <= amount; i++)
{
var ins = _root["p" + i];
ins._x = leftpoint + i * (pWidth + pDist);
ins._y = pY;
} // end of for

_root.rollSpeed = 0;
_root.tarSpeed = 1;
baseAcc = 0.600000;
onEnterFrame = function() {
if (_root.move){
_root.tarSpeed = -Math.round((_root._xmouse - 275) / 27);
acceleration = baseAcc - _root.rollSpeed / 20;
if (_root.rollSpeed > _root.tarSpeed)
{
_root.rollSpeed = _root.rollSpeed - acceleration;
} // end if
if (_root.rollSpeed < _root.tarSpeed)
{
_root.rollSpeed = _root.rollSpeed + acceleration;
} // end if
for (i = 1; i <= _root.amount; i++)
{
var instance = _root["p" + i];
instance._x = instance._x + _root.rollSpeed;
if (instance._x < _root.leftPoint)
{
var dif = _root.leftPoint - instance._x;
instance._x = _root.rightPoint - dif;
continue;
} // end if
if (instance._x > _root.rightPoint)
{
var dif = instance._x - _root.rightPoint;
instance._x = _root.leftPoint + dif;
} // end if
} // end of for
}
}


یا حق ...

Hamid_PaK
جمعه 19 خرداد 1385, 09:08 صبح
اینم نونه که ضمیمه کردم ...

موفق باشید ، یا حق ...

kathy11ir
شنبه 20 خرداد 1385, 07:07 صبح
سلام !

واقعا" بی نظیر بود . برنامه شما بدست من رسید فقط layer3 خالی بود . من برای برنامه خودم برای نوار ابزار 1250 فریم گرفته ام . با توجه به این برنامه اصلا" لازم به گرفتن این تعداد فریم هست . در صورت منفی بودن جواب چند فریم می توانم بگیرم .

در ضمن a داخل برنامه با نام لایه که همان a می باشد یکی است.
میشه لطف کنین یک بار دیگر برنامه را برای من به صورت کامل با تمام لایه ها بفرستید . چون من نتوانستم از داخل برنامه آن را اجرا نمایم.
در صورت امکان ممکن است لطف کنید و توضیح کوچکی در مورد کدهای برنمه ای که نوشتید بدهید
متشکرم

Hamid_PaK
شنبه 20 خرداد 1385, 16:54 عصر
stop();

for (a=1 ;a<=50; a++) {
var tmp:MovieClip = _root.attachMovie('mc_tmp', 'sx_new'+a, '10'+a);
tmp.txt.text = a;
tmp.onEnterFrame = function () {
if (hitTest(_root._xmouse, _root._ymouse, true)) {
moveme = false;
} else {
moveme = true;
}
}
}

setrndmask(_root, 500, 400, 0, 0, 0);

var mc_tmp:MovieClip = _root.createEmptyMovieClip('temp_movieclip', _root.getNextHighestDepth());

count = 50;
a_dist = 15;
a_width = 90;
t_width = (count * a_width) + ((count-1) * a_dist);
l_point = -(t_width - 500) / 2;
r_point = 500 + (t_width-500) / 2;

roll_spd = 0;
tar_spd = 1;
base_acc = 0.500000;

moveme = true;

for (i = 1; i<=count; i++) {
var ins = _root['sx_new' + i];
ins._x = l_point + i * (a_width + a_dist);
ins._y = 200;
}

mc_tmp.onEnterFrame = function () {
if (moveme) {
tar_spd = -(Math.round((_root._xmouse - 250) / 25));
acceleration = base_acc - roll_spd / 20;
if (roll_spd > tar_spd) {
roll_spd = roll_spd - acceleration;
}
if (roll_spd < tar_spd) {
roll_spd = roll_spd + acceleration;
}
for (i=1; i<=count; i++) {
var ins:MovieClip = _root['sx_new' + i];
ins._x = ins._x + roll_spd;
if (ins._x < l_point) {
diffy = l_point - ins._x;
ins._x = r_point - diffy;
continue;
}
if (ins._x > r_point) {
diffy = ins._x - r_point;
ins._x = l_point + diffy;
}
}
}
// trace(tar_spd+' '+acceleration+' '+roll_spd);
}

function setrndmask(mcname, w, h, x, y, rnd){
var ins = mcname.createEmptyMovieClip("masking",10);
with(ins){
beginFill(0x000000);
moveTo(x,y);
lineTo(w-rnd,y);
curveTo(w,y,w,y+rnd);
lineTo(w,h-rnd);
curveTo(w,h,w-rnd,h);
lineTo(x+rnd,h);
curveTo(x,h,x,h-rnd);
lineTo(x,y+rnd);
curveTo(x,y,x+rnd,y);
endFill();
}
mcname.setMask(ins);
}

در ابتدا باید بگم که در فایل ضمیمه لایه 3 یک لایه اضافی است ...

1. تعداد فریم مورد نیاز 1 ، به این قسمت کد دقت کنید movie متوقف شده است ...

stop();

2. اگر منظور شما a داخل کد است هیچ ربطی بین نام لایه و حروف داخل کد وجود ندارد.

3. نهوه کار کد :
آبجکت ها بداخل صفحه اضافه می شوند


for (a=1 ;a<=50; a++) {
var tmp:MovieClip = _root.attachMovie('mc_tmp', 'sx_new'+a, '10'+a);
...


شما یکسری آبجکت دارید که باید به ترتیب با فاصله های معین قرار گیرند


for (i = 1; i<=count; i++) {
var ins = _root['sx_new' + i];
ins._x = l_point + i * (a_width + a_dist);
ins._y = 200;
}


حالا همه چیز آماده است تا آبجکتها حرکت کنند
با عددی که به نسبت موقعیت موس در صفحه بدست می آید آنها را به راست و یا چپ حرکت می دهیم


...
tar_spd = -(Math.round((_root._xmouse - 250) / 25));
...


هیچ کد و یا فایل اضافه ای هم برای ساخت یک نمومه دیگر لازم نیست !!!

موفق باشید ، یا حق ...

kathy11ir
یک شنبه 21 خرداد 1385, 08:17 صبح
سلام

می خواستم ببینم که 'sx_new' و 'mc_tmp' آیا obgect هستند . اگر این طور است در کجا ایجاد شده و قرار می گیرند . در ضمن تعداد فریم ها زیاد شود در یک برنامه مثلا" 3000 فریم . آیا بر سرعت برنامه تاثیر می گذارد .

من در این برنامه خودم از 2000 فریم استفاده کردم اما شما بایک فریم آن کار را انجام دادید .از راهنمایی های شما مچکرم . معلوم می شود که شما یک برنامه نویس حرفه ای در این زمینه هستید ، میشه لطف کنید و من را راهنمایی کنید که برای افزایش اطلاعات خود در زمینه کد نویسی در فلش باید از چه کتابها و سایتهایی استفاده کنم . من در فهمیدن کدها مشکل دارم . باید ابتدا آنها را درک کنم تا بتوانم بعدا" از آنها استفاده کنم.

متشکرم

Hamid_PaK
دوشنبه 22 خرداد 1385, 03:24 صبح
1. 'sx_new' و 'mc_tmp' ایندو فقط اسم هستند ... اولی از روی دومی ساخته شده و دومی در کتابخانه فایل می باشد ...
2. تعداد فریم ریت ( Frame Rate ) کلیپ فلش فقط بر سرعت حرکت تاثیر خواهد داشت ...
3. شما برای تسلط بر اسکریپت فلش از خود مرجع FlashActionScriptHelp داخل خود فلش موجود هست می توانید استفاده کنید ولی ابتدا باید Syntacx کد نویسی را بخوبی فرا بگیرید ( که به JavaScirpt بسیار شبیه است ).

موفق باشید ، یا حق ...