Цитата:
Сообщение от Rivexe
Скорее всего будет проще, если вы скинете небольшой исходник по которму можно будет уже более подробно разобраться и потыкать что у вас получилось.
|
Вот код, для любителей поприкалываться и покритиковать скажу что за три дня код превратился в полное г...но. Обьективную критику конечно же приму.
вот первый класс
Код AS3:
package Cirk_Utility
{
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.engine.*;
import flash.text.*;
import My_Utility.Cirk2;
/**
* ...
* @author @PsYcHoTeChNiCk
*/
public class Elemet extends Sprite
{
private var Face: Shape; // рисунок
public var front_level: Number; // это служебная перменная на далекое будущее не суть важна
private var colors: uint;
public var Moving: Boolean = false;
public var anglerot: Number = 0; // поворот задается позднее
private var spinout: Number = 0; // текущий угол поворота
private var LRDirect: Number; // направление движение
private var scale_arr: Array = new Array(1, 0.75, 0.5, 0.5, 0.75); // это временно для визуального
private var levels: Array = new Array(0,1,2,3,4); // слежения
private var place: Array = new Array(0, 1, 2, -2, -1); //пришлось сделать чтобы определять направление движения
private var thisplace: Number; //собственно тоже самое только для 1 экземпляра
private var float: Number = 0; // что-то вроде счетчика как в for i
public var SetCtrl: Cirk2; //это я уже перекличку устроил
private var Ctrl: Number //вывод локали
public function Elemet(color: Number)
{
super();
if (color == 0) {
colors = 0x0000ff;
}
if (color == 1) {
colors = 0x00ff00;
}
if (color == 2) {
colors = 0xff0000;
}
if (color == 3) {
colors = 0x00ffff;
}
if (color == 4) {
colors = 0xff00ff;
}
spinout = color * 72; //распределям позиции при указании примечание: 72=360 / 5;
Ctrl = color; // см выше
thisplace = place[color]; позиция для передачи
// дальше рисуем
Face = new Shape();
Face.graphics.lineStyle(5, colors);
Face.graphics.beginFill(colors, 0.5);
Face.graphics.drawCircle(0, 0, 50);
addChild(Face);
// закончили малевание
//задаем позицию
this.x = 200 * Math.sin((spinout * Math.PI) / 180);
this.y = (200 * Math.cos((anglerot*0 * Math.PI) / 180))/5;
this.MyScale(scale_arr[color]);
this.front_level = levels[color];
addEventListener(MouseEvent.CLICK, onClick);
addEventListener(Event.ENTER_FRAME, onFrame);
}
/че делаем при клике ниже
private function onClick(e:MouseEvent): void {
Moving = true;// разрешаем движение
anglerot = thisplace * 72; //узнаем сколько нужно пройти с + и -
if (thisplace != 0) { //если на первом месте нам не нужно ничего двигать
if (thisplace > 0) { /двигаемся вправо или влево
LRDirect = 1;
}else {
LRDirect = 0;
}
}
SetCtrl.controlRoll = Ctrl; // а это собственно перекличка
}
public function MyScale(i: Number):void { // тут понятно думаю
this.scaleX = i;
this.scaleY = i;
}
// далее собственно движение
private function onFrame(e:Event):void {
if (Moving) { //если разрешено двигаться двигаемся.
if (LRDirect == 0) { //если вправо значит будем прибавлять
if (float != anglerot) { // тут счетчик сравниваем соответствует ли расстоянию
spinout += 1;
float -= 1;
}else {// если путь пройден запрещаем двигаться и сбрасывам счетчик чтобы можно было двигаться много раз
Moving = false;
float = 0;
}
}else { // все тоже только для другого направления
if (float != anglerot) {
spinout -= 1;
float += 1;
}else {
Moving = false;
float = 0;
}
}
}
собственно двигаемся
this.x = 200 * Math.sin((spinout * Math.PI) / 180);
this.y = (200 * Math.cos((spinout * Math.PI) / 180)) / 5;
}
}
}
вот второй который все создает и наверно портит
Код AS3:
package My_Utility
{
import Cirk_Utility.Elemet;
import Cirk_Utility.Platforma;
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.engine.*;
import flash.text.*;
/**
* ...
* @author @PsYcHoTeChNiCk
*/
public class Cirk2 extends Sprite
{
private var ikon: Elemet;
private var plat_form: Platforma;
private var outstr: TextField;
private var arr_icon: Array = new Array();
private var scale_arr: Array = new Array(1, 0.75, 0.5, 0.5, 0.75);
private var levels: Array = new Array(0, 1, 4, 3, 2);
public var controlRoll: Number;
public function Cirk2()
{
super();
outstr = new TextField();
outstr.background = false;
outstr.text = " ";
outstr.visible = true;
outstr.x = 0;
outstr.y = -200;
outstr.textColor = 0xffffff;
outstr.autoSize = TextFieldAutoSize.CENTER;
addChild(outstr);
for (var i: int = 0; i < 5; i++) {
var label: Elemet = new Elemet(i);
arr_icon.push(label);
addChild(arr_icon[i]);
}
addEventListener(Event.ENTER_FRAME, onFrame);
}
private function onFrame(e: Event):void {
if (arr_icon[controlRoll].Moving) {
arr_icon[0].Moving = arr_icon[controlRoll].Moving;
arr_icon[1].Moving = arr_icon[controlRoll].Moving;
arr_icon[2].Moving = arr_icon[controlRoll].Moving;
arr_icon[3].Moving = arr_icon[controlRoll].Moving;
arr_icon[4].Moving = arr_icon[controlRoll].Moving;
arr_icon[0].LRDirect = arr_icon[controlRoll].LRDirect;
arr_icon[1].LRDirect = arr_icon[controlRoll].LRDirect;
arr_icon[2].LRDirect = arr_icon[controlRoll].LRDirect;
arr_icon[3].LRDirect = arr_icon[controlRoll].LRDirect;
arr_icon[4].LRDirect = arr_icon[controlRoll].LRDirect;
arr_icon[0].anglerot = arr_icon[controlRoll].anglerot;
arr_icon[1].anglerot = arr_icon[controlRoll].anglerot;
arr_icon[2].anglerot = arr_icon[controlRoll].anglerot;
arr_icon[3].anglerot = arr_icon[controlRoll].anglerot;
arr_icon[4].anglerot = arr_icon[controlRoll].anglerot;
}else {
arr_icon[0].Moving = false;
arr_icon[1].Moving = false;
arr_icon[2].Moving = false;
arr_icon[3].Moving = false;
arr_icon[4].Moving = false;
}
}
}
}
добавил комменты в первый класс второй мне кажется прозрачен и без коментов.
Добавлено через 3 минуты
Цитата:
Сообщение от caseyryan
Нет
Показывайте свой код, где добавляется слушатель CLICK, где проверяете e.target. Это дает результат, если правильно реализовано, но не видя кода, трудно что-либо дельное посоветовать
|
ну свой вариант уже не хочу обратно все портить выше выложил что щас есть. Мне просто интересно как бы вы повесили клик о котором сами говорили. пример кода можно не морочиться с начинкой. поминимум чтобы было понятно.
Добавлено через 15 часов 29 минут
И тишина...
неужели такая сложная задача заставить двигаться одновременно несколько копий одного объекта.