Форум 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

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


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

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