Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Меню типа спидометр (http://www.flasher.ru/forum/showthread.php?t=109029)

мазель 05.03.2008 20:23

Меню типа спидометр
 
Уважаемые знатоки!
Помогите, плз, начинающей девушке сделать меню в виде половины циферблата часов или спидометра, так чтобы при наведении на пункты меню стрелка поворачивалась на нужный угол, при этом слегка покачиваясь при остановке.
Честно целый день искала примеры. Нашла маятники и слежение за курсором. А мне бы не слежение, а просто поворот при наведении на пункт меню..
Спасибо огромное за помощь всем, кто откликнется.

Olegg 05.03.2008 20:46

это можно сделать даже стандартными командами проще простого.
Вопрос в том,будет ли меню изменяться(добавляться элементы) или количество пунктов останется неизменным? то есть,если 4 пункта -
п.1 - стрелка поворачивается на 45 гр.
п.2 - на 90
п.3 - на 135
п.4 - на 180.

Я прально понял? В общем тут есть два варианта - если меню не будет меняться,можно просто при наведении курсора на нужный мувик мувик со стрелкой перемещался на нужный кадр,там где поворот.Если будет меняться - вам придётся вспомнить математику.

мазель 05.03.2008 21:18

Вспомнить математику, а точнее углы в градусах, это не сложно :) А вот как сделать, чтобы при наведении на п.1 стрелка повернулась на угол1, при наведении на п.2 стрелка повернулась на угол2. Не прыгнула, а именно повернулась, покачиваясь в конце движения.

Obi 05.03.2008 21:34

На счет покачивания, можно это вручную анимировать и запускать в нужный момент.
Код:

myMc.onPress = function() {
      rotateArrow(60, 3);
}

function rotateArrow(angle:Number, speed:Number):Void {
  arrowMc.onEnterFrame = function() {
        if(arrowMc._rotation > angle) {
              arrowMc._rotation -=speed;
        }else if(arrowMc._rotation < angle) {
              arrowMc._rotation +=speed;
        }else {
              arrowMc.gotoAndPlay(2); // вот тут запускается анимация дрожания
              delete arrowMc.onEnterFrame;
        }
  }
}

Писал "на лету", по этому формат никакой )

мазель 05.03.2008 22:20

Я не очень поняла, что куда надо поместить.. На пункты меню надо ведь вызов функции или что-то там? Чтобы при наведении на пункт стрелка поворачивалась.. А саму функцию просто в jnltkmysq слой action? Можно мне подробнее, плиззз!!!

aksios 05.03.2008 23:09

Вложений: 1
мазель, я бы сделал как то так. :cool:

мазель 05.03.2008 23:17

Спасибо за попытку, но мне, к сожалению, так не подходит(( следить за мышкой и подсвечивать кнопки я справилась и сама. А мне надо вообще без слежения за мышкой, только поворот при наведении на кнопку...

Obi 06.03.2008 01:02

Цитата:

Сообщение от мазель
Я не очень поняла, что куда надо поместить.. На пункты меню надо ведь вызов функции или что-то там? Чтобы при наведении на пункт стрелка поворачивалась.. А саму функцию просто в jnltkmysq слой action? Можно мне подробнее, плиззз!!!

Код:

import flash.geom.Point;
import caurina.transitions.Tweener; // http://code.google.com/p/tweener/  Copyright (c) 2006-2007 Zeh Fernando and Nate Chatellier

var centerPoint:Point = new Point(Stage.width/2, Stage.height/2);
var radius:Number = 160;
var amountParas:Number = 15;
var myArrow:MovieClip;

buildMenu(centerPoint,radius,amountParas);
createArrow();

function buildMenu(centerPoint:Point, radius:Number, amountParas:Number):Void {
        var step:Number = Math.PI*2/amountParas;
        var angle:Number = 0;
        var rotAng:Number = 0;
        for (var i:Number = 0; i<amountParas; i++) {
                createPara(_root,new Point((Math.sin(angle)*radius)+centerPoint.x, (Math.cos(angle)*radius)+centerPoint.y),30,30,i,rotAng);
                angle += step;
                rotAng -=360/amountParas;
        }
}


function createPara(cont:MovieClip, pos:Point, w:Number, h:Number, depth:Number, thisAngle:Number):Void {
        var mc:MovieClip = cont.createEmptyMovieClip("paraMc"+depth, depth);
        mc._x = pos.x;
        mc._y = pos.y;
        mc.lineStyle(2,0xFF0000);
        mc.beginFill(0x000000);
        mc.moveTo(0,0);
        mc.lineTo(w,0);
        mc.lineTo(w,h);
        mc.lineTo(0,h);
        mc.lineTo(0,0);
        mc.endFill();
        mc.onPress = function() {
                Tweener.addTween(myArrow, { _rotation:thisAngle, time:1, transition:"easeinoutexpo" } );
        }
}

function createArrow():Void {
        myArrow = _root.createEmptyMovieClip("arrow", _root.getNextHighestDepth());
        myArrow._x = centerPoint.x+5;
        myArrow._y = centerPoint.y+5;
        myArrow.lineStyle(3,0x0000FF);
        myArrow.moveTo(0,0);
        myArrow.lineTo(0,radius-15);
}

просто вставить код в новый fla.
Я правильно понял задачу?

UPD: А, ну да, еще скачать пакет отсюда и в флеше прописать путь к нему.

мазель 06.03.2008 12:18

Ух ты... Спасибо большое, пойду разбираться..

Olegg 06.03.2008 13:14

мазель,да лучше бы сделали по кадрам переходы.Это уже черезчур - писать для такого класс.

aksios 06.03.2008 13:30

мазель, когда сделайте отпишитесь, размер флешки, быстродействие, визуал - очень интересно как оно.
Зы: я пример привел, мне было в лом засовывать туда код для "маятника" - он же у вас имеется.

мазель 06.03.2008 21:02

Вложений: 1
Это как можно сделать переходы по кадрам? Если мне надо с любого пункта меню на любой сделать поворот стрелки, да еще с затуханием? Я не спорю, что классы м.б. чересчур, наверняка можно обойтись одной функцией для поворота и одной для затухания, только вот не получается никак(( У меня есть пример, когда указатель двигается между кнопками меню, а мне надо переделать движение в поворот стрелки и добавить затухание. Поможешь? К сожалению исходник приложить не могу, он весит больше допустимого.. Если возьмешься помочь - пришлю почтой :rolleyes:

aksios, если сделаю (или если мне помогут сделать ;) ), обязательно напишу ))

MrPoma 06.03.2008 21:15

Код:

var angle:Number = 100;

mc.onEnterFrame = function(){
        var d:Number = angle - this._rotation;
       
        this._rotation += d * 0.1;       
}

Цитата:

Сообщение от мезель
Помогите, плз, начинающей девушке

Классно сказано. :D

Obi 06.03.2008 22:52

Цитата:

Сообщение от Olegg
мазель,да лучше бы сделали по кадрам переходы.Это уже черезчур - писать для такого класс.

А где, простите, Вы класс увидели? Тот код что я написал -- процедурный.
Если Вы про Tweener, то это невероятно удобный класс, даже пакет, попробуйте -- поймете.

Цитата:

Сообщение от мазель
а мне надо переделать движение в поворот стрелки и добавить затухание.

Это как?

Жень Шень 07.03.2008 11:51

Вложений: 1
Привет, Мазель!
Посмотри мой простенький вариант.
Ежели подойдет - будем считать за подарок к 8 марта.
ЗЫ
чтоб было как в последнем примере - onPress заменит на onRollOver

мазель 07.03.2008 12:45

Жень Шень - царь!! (или царица, если вдруг девушка ;) )
Спасибо огромное!!! Это то, что надо было! Всем остальным тоже спасибо, хоть я и не поняла ничего из того, что насоветовали)) 8 Марта удался! :yahoo:


Часовой пояс GMT +4, время: 07:30.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.