Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема с removeChild (http://www.flasher.ru/forum/showthread.php?t=206542)

Wolsh 11.02.2014 12:03

Все может быть. Но я то смотрю на ваш код. И я вижу, что кнопка, массив и игрок создаются внутри двойного цикла каждый раз, когда значение ячейки map больше ноля. Причем игрок добавляется в список отображения и в свежесозданный массив, но массив при следующей итерации затрется новым, а с ним и единственная ссылка на данный экземпляр игрока, валяющийся на сцене.

Godwarlock 11.02.2014 16:54

Код AS3:

public function createigrok()
        {
        _array = [];//создаём массив
    var igrok:player = new player;
        _array.push(igrok); //Добавляем новый элемент в массив
    igrok.x = 200;
    igrok.y = 300;
        igrok.name = "ssss";
    addChild(_array[IGROK_ID]);
    trace(igrok);
        }

Код AS3:

 public function clicki()
  {
            buts.addEventListener(MouseEvent.CLICK, onClicks);
  }
  public function onClicks(e:MouseEvent):void
        {
      removeChild(_array[IGROK_ID] as DisplayObject);
                        _array.splice(IGROK_ID, 1);
    }

Выравнял коды, теперь игрок не создается в циклах, но это не решило проблему

Wolsh 11.02.2014 17:24

Ну теперь хоть код видно, спасибо. А это оказывается belv накосячил с циклом то)))
Протрейсите в onClicks — trace(_array[IGROK_ID]); — что напишет? Потому как выглядит уже как мистика, но это оттого, что нам не видна цельная картина, а Вы уже столько там понаписали/накопипастили, что эти куски, которые показываете, ничего не значат. Надеюсь, хоть на таймлайне там у вас никакого кода не осталось?

Добавлено через 2 минуты
И да, Вам действительно нужен массив, у Вас несколько игроков предполагается? Как Вы управлять ими собираетесь?

Godwarlock 11.02.2014 17:48

Код AS3:

import flash.events.MouseEvent;
import flash.text.TextField;
import flash.events.Event;
import flash.display.DisplayObject;
import flash.display.Stage;
import flash.display.Sprite;
        public class Main extends MovieClip
        {
    public var map:Array = [
            [1,1,1,1,1,1,1,1,1,1,1,1],
            [1,0,0,2,1,1,1,1,1,2,0,1],
            [1,0,0,0,1,1,1,1,1,0,0,1],
            [1,0,2,0,0,1,1,1,1,0,1,1],
            [1,0,1,0,0,0,1,2,0,0,0,0],
            [1,0,0,1,0,0,1,0,0,0,0,0],
            [1,1,1,1,0,0,1,0,0,1,1,1],
            [1,0,0,0,0,0,0,0,0,0,0,1],
            [1,1,1,1,1,1,1,1,1,1,1,1],
            ];
 
 public var size:uint = 50;
 private const IGROK_ID:uint = 0;//создаём константу с номером... или лучше не 0, а 0x000000
 private var _array:Array;
 public function Main()
  {
  btn.addEventListener(MouseEvent.CLICK, onClick);
  }
  public function clicki()
  {
            buts.addEventListener(MouseEvent.CLICK, onClicks);
  }
  public function onClicks(e:MouseEvent):void
        {
      removeChild(_array[IGROK_ID] as DisplayObject);
                        _array.splice(IGROK_ID, 1);
    }
  public function onClick(e:MouseEvent):void
    {
    if (login.text =="1" && pass.text=="1")
        {
        this.gotoAndStop(2);
        createvillage();
        createigrok();
    }
 else
  {
  res.text = "Вы ввели неправильные данные";
  }
        }
        public function createigrok()
        {
        _array = [];//создаём массив
    var igrok:player = new player;
        _array.push(igrok); //Добавляем новый элемент в массив
    igrok.x = 200;
    igrok.y = 300;
        igrok.name = "ssss";
    addChild(_array[IGROK_ID]);
    trace(igrok);
    trace(IGROK_ID);
        }
  public function createvillage()
  {
  for (var i:uint=0; i<map.length; i++)
        {
  for (var j:uint=0; j<map[i].length; j++)
  {
          if (map[i][j] > 0)
          {
    var obj:village = new village;
    obj.x = j*size;
    obj.y = i*size;
    obj.gotoAndStop(map[i][j])
    addChild(obj);
        }
  }
        }
  }
 
 
 
 
        }
}

Переписал немного код, разделив всё по функциям
Трейс IGROK_ID выдаёт 0. Не пойму никак, что сделано не так. А предполагается только 1 игрок, 1 объект которым надо управлять и то с ним проблема какая-то..жуть...Трейсил не в onClicks, ибо там он ничего не показывает по нажатию

Wolsh 11.02.2014 18:33

У Вас в мейне два кадра?? Убиться веником... Тут я не помощник.

Godwarlock 11.02.2014 18:35

И чем же плохо иметь 2 кадра?

Wolsh 11.02.2014 21:10

А вот давайте наоборот, Вы мне ответите. К какому кадру относится показанный Вами код?

Я еще могу понять "запрограммировать мультфильм". Но "нарисовать в кадрах программу" это без меня.

Godwarlock 11.02.2014 21:36

Че значит к какому кадру? Данный код является классом Main, этот класс просто подключается к самой флехе, со ценой и прочим
http://urls.by/1pdr

Wolsh 11.02.2014 22:07

Вы, может, где-то читали или слышали, как флэш-плеер работает с swf-файлами?
Особенность флэш-технологии в потоковости: плеер может показывать люблй кадр, который уже загрузился. Допустим, у вас мультик из 600 кадров. Так вот, в swf они расположены последовательно, и как только загрузится первый кадр, плеер его отобразит. Загрузится второй — отобразит второй. Примерно как в gif-анимации. Поэтому во всяких Масянях принято было делать предзагрузчик и после него кнопку Старт, чтобы при медленном интернете зритель не смотрел на слоумоушн, а сходил поставил чай и после полной загрузки всех кадров наслаждался нормальным фпс.
Теперь попробуйте представить код Документ-класса, привязанного к мувику из 600 кадров. Очевидно, что конструктор этого класса должен отработать еще ДО показа самого первого кадра. При этом не то что 600-го, а даже второго кадра еще нет в плеере вообще. Как Вы думаете, Вы можете из этого кода обратиться к птичке, которая пролетает по экрану в кадрах с 312-го по 379-й? Можете повесить на нее слушатель клика, например?

Godwarlock 11.02.2014 22:12

Код AS3:

Как Вы думаете, Вы можете из этого кода обратиться к птичке, которая пролетает по экрану в кадрах с 312-го по 379? Можете повесить на нее слушатель клика, например?

Почему нет? Обычная птичка, дать ей имя и в коде делать что угодно с ней, даже тот же самый клик Оо. Я не могу понять к чему вы это всё


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

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