Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.03.2017, 20:38
Nyb вне форума Посмотреть профиль Отправить личное сообщение для Nyb Найти все сообщения от Nyb
  № 1  
Ответить с цитированием
Nyb

Регистрация: Mar 2017
Сообщений: 1
Post Не могу воспроизвести обект на дисплей

Я полний Нуб, начал читать книжку Колина Мука, решил сразу начать писать програми в класах, но когда решил написать свой первий код столкнулся с проблемой(указана в теме).Не игнорьте, могу помочь нарисовать 2д пиксель арт для вашего личного проекта.


Код AS3:
package{
	import flash.display.MovieClip;
	import flash.events.Event;
	public class Bird extends MovieClip{
		public var bird:Bird; 
		public function Bird(){
			bird = new Bird();
			addChild(bird);
			bird.addEventListener(Event.ENTER_FRAME, Enter);
		}
		public Enter(e:Event):void{
			bird.y++;
		}
	}
}

Старый 08.03.2017, 20:59
Жень Шень вне форума Посмотреть профиль Отправить личное сообщение для Жень Шень Найти все сообщения от Жень Шень
  № 2  
Ответить с цитированием
Жень Шень
 
Аватар для Жень Шень

блогер
Регистрация: Feb 2004
Адрес: Украина
Сообщений: 1,180
Записей в блоге: 3
Отправить сообщение для Жень Шень с помощью ICQ
Сразу бросилось в глаза - пропущено function в обработчике события


Старый 08.03.2017, 21:12
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 3  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
где-то я этот акцент уже слышал

Старый 08.03.2017, 21:12
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 4  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Что это? Экземпляр Bird в классе Bird?)
Ві явно не с того места читать книжку начали.
__________________
There is no thing in this world that is not simple.

Старый 08.03.2017, 23:58
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
public function Bird(){ // это называется Конструктор. Он создает новый экземпляр класса Bird
bird = new Bird(); // так вызывается конструктор класса Bird
То есть, внутри конструктора вы вызываете этот конструктор. Который вызывает конструктор, вызывающий конструктор.

Добавлено через 26 минут
Классы нужны для того, чтобы выделить каждый объект программы в отдельную сущность. Это вот — Птица. Написав ее класс, можно будет создавать много однотипных экземпляров этой самой Птицы, которые будут вести себя одинаково. Создавать где? В других классах, в их экземплярах. И есть один класс, типа самый главный, называется Класс Документа, или Документ-класс, обычно его именуют Main. Когда вы запускаете свой ролик в флэш-плеере, первым делом создается и размещается на сцене экземпляр этого Документ-класса. То есть с него все начинается. Поэтому сначала надо написать этот класс Мейн и указать его в редакторе как Документ-класс (там есть соответствующая форма).
И вот в этом Мейне вы уже начинаете что-то лепить из других классов. Например, создаете экземпляр Птицы, добавляете его в отображение и начинаете двигать.
Если эта Птица сама по себе ничего не делает, не расчитывает и ничем не управляет, а представляет из себя просто муви-клип с анимацией махания крыльями, то по-сути писать то ничего и не надо в ее классе, достаточно указать класс для ролика в библиотеке. Вам стоило начать с этого — просто написать класс Мейн, по-сути тот же код, что Вы писали в кадре, с небольшими особенностями оформления его как Класса. А потом уже думать, какой бы ОСМЫСЛЕННЫЙ класс написать еще. То есть такой, чтобы было о чем писать))))) Чтобы он что-то делал, а не просто "был", добавлялся на сцену и там красовался.

Добавлено через 45 минут
В каком случае был бы смысл писать класс Bird?
Если бы у птицы были параметры. Например, можно было бы создавать птиц разного цвета. Или создавать разных птиц, указывая их название в параметре конструктора. То есть, использование класса выглядело бы так (код в Мейне):
Код AS3:
var eagle:Bird = new Bird("Eagle"); // орел
this.addChild(eagle);
var owl:Bird = new Bird("Owl"); // сова
this.addChild(owl);
Вот тогда в классе Птица, в конструкторе, было бы что-то похожее по смыслу на то, что написали Вы: нужно было бы найти ролик соответствующей птицы и добавить его в отображение данного экземпляра Птицы:
Код AS3:
public function Bird(type:String) {
 if(type == "Eagle") this.addChild(new Eagle()); // берем из библиотеки ролик класса Eagle
 if(type == "Owl") this.addChild(new Owl()); // берем из библиотеки ролик класса Owl
}
Не самый лучший пример использования классов, но хотя бы демонстрирующий, зачем они нужны.
У вас будет два экземпляра класса Bird, выглядящие по-разному, но абсолютно одинаковые для программы.

Этот прием называется Композиция (или агрегация) — когда экземпляр одного класса добавляет в себя экземпляр другого.
Противоположный композиции прием называется Наследование — это если бы классы Орел и Сова наследовали (расширяли, extends) класс Птица. Для роликов, нарисованных в графическом редакторе Adobe Flash, такое невозможно — они могут расширять только МувиКлип, поэтому два ролика с разными изображениями птиц не могут расширять один класс Птица. Тогда есть смысл использовать Композицию.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 09.03.2017 в 00:55.
Старый 09.03.2017, 00:54
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 6  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Может, дойдёт так
Код AS3:
package com.zackmercury.example
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.Point;
 
	/**
	 * ...
	 * @author ZackMercury
	 */
	public class Bird extends Sprite 
	{
		private static const GRAVITY:Number = 9.80665;//постоянная ускорения свободного падения на поверхности Земли
 
		private var name:String = "Unnamed"; //имя птицы
		private var mass:Number = 1; //масса птицы(kg)
		private var velocity:Point = new Point(0, 0); //вектор скорости, стандартный компонент любой игры с даже простейшей физикой
		private var netForce:Point = new Point(0, 0); //равнодействующая сил, из физики = сумме всех сил, воздействующих на предмет, пропорциональна ускорению [F] = Newtons(kg * m / (s^2))
		private var sprite:Bitmap; //здесь будет храниться картинка птицы, в будущем она может передаваться в конструктор.
		private var isAffectedByGravity = true;
 
		public function Bird() 
		{
			this.addEventListener(Event.ADDED_TO_STAGE, init); //дождёмся добавления на сцену
		}
 
		private function init(e:Event):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);//и удалим слушатель добавления на сцену
			//здесь наша птица создана
 
			//устанавливаем равнодействующую в вектор гравитации(значит, больше ничего не будет воздействовать на птицу в текущей версии)
			if(isAffectedByGravity) netForce.y -= GRAVITY * mass;
			addChild(sprite);
			addEventListener(Event.ENTER_FRAME, update);
		}
 
		private function update():void
		{
			//прибавляем к координатам птицы вектор скорости
			x += velocity.x;
			y += velocity.y;
 
			//прибавляем к вектору скорости вектор ускорения(равнодействующую сил, делённую на массу, согласно второму закону Ньютона)
			velocity.x += netForce.x / mass;
			velocity.y += netForce.y / mass;
		}
 
	}
 
}
И, хоть приведённый выше код может использоваться в игре, его нужно дописать так, чтобы сколько бы птиц мы не создавали, мы могли бы управлять отдельно каждой снаружи класса(в том самом Document Class(Main)), чтобы сделать их независимыми друг от друга.
Для этого в конструктор передаются аргументы.

Что это даёт? А вот, что:
Код AS3:
package com.zackmercury.example
{
	import flash.display.Sprite;
	import flash.events.Event;
	/**
	 * ...
	 * @author ZackMercury
	 */
	public class Main extends Sprite 
	{
 
		public function Main() 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			var jackTheBird:Bird = new Bird("Jack", 1, 0, 0, true);
			var melanieTheBird:Bird = new Bird("Melanie", 5, 2, 2, true);
			addChild(jackTheBird);
			addChild(melanieTheBird);
		}
	}
}
Физическая реализация недоделана, ибо она считает кадры как секунды, но это вы и сами сможете исправить, если начнёте наконец читать книгу, а не листать. А, и ещё неплохо бы конвертировать систему координат в нужную, ибо пиксели тут считаются за метры, а это не то, что нам нужно, а также во флеше ось Y инвертирована в отличии от общепринятой декартовой системы. В остальном код птицы будет выглядеть примерно так.
Но опять же, это пока вы не дочитаете до наследования. Затем код придётся переписывать.
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 12.03.2017 в 21:37.
Создать новую тему Ответ Часовой пояс GMT +4, время: 09:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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