|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2017
Сообщений: 1
|
Не могу воспроизвести обект на дисплей
Я полний Нуб, начал читать книжку Колина Мука, решил сразу начать писать програми в класах, но когда решил написать свой первий код столкнулся с проблемой(указана в теме).Не игнорьте, могу помочь нарисовать 2д пиксель арт для вашего личного проекта.
|
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
где-то я этот акцент уже слышал
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
public function Bird(){ // это называется Конструктор. Он создает новый экземпляр класса Bird bird = new Bird(); // так вызывается конструктор класса Bird Добавлено через 26 минут Классы нужны для того, чтобы выделить каждый объект программы в отдельную сущность. Это вот — Птица. Написав ее класс, можно будет создавать много однотипных экземпляров этой самой Птицы, которые будут вести себя одинаково. Создавать где? В других классах, в их экземплярах. И есть один класс, типа самый главный, называется Класс Документа, или Документ-класс, обычно его именуют Main. Когда вы запускаете свой ролик в флэш-плеере, первым делом создается и размещается на сцене экземпляр этого Документ-класса. То есть с него все начинается. Поэтому сначала надо написать этот класс Мейн и указать его в редакторе как Документ-класс (там есть соответствующая форма). И вот в этом Мейне вы уже начинаете что-то лепить из других классов. Например, создаете экземпляр Птицы, добавляете его в отображение и начинаете двигать. Если эта Птица сама по себе ничего не делает, не расчитывает и ничем не управляет, а представляет из себя просто муви-клип с анимацией махания крыльями, то по-сути писать то ничего и не надо в ее классе, достаточно указать класс для ролика в библиотеке. Вам стоило начать с этого — просто написать класс Мейн, по-сути тот же код, что Вы писали в кадре, с небольшими особенностями оформления его как Класса. А потом уже думать, какой бы ОСМЫСЛЕННЫЙ класс написать еще. То есть такой, чтобы было о чем писать))))) Чтобы он что-то делал, а не просто "был", добавлялся на сцену и там красовался. Добавлено через 45 минут В каком случае был бы смысл писать класс Bird? Если бы у птицы были параметры. Например, можно было бы создавать птиц разного цвета. Или создавать разных птиц, указывая их название в параметре конструктора. То есть, использование класса выглядело бы так (код в Мейне): var eagle:Bird = new Bird("Eagle"); // орел this.addChild(eagle); var owl:Bird = new Bird("Owl"); // сова this.addChild(owl); 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. |
|
|||||
Может, дойдёт так
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; } } } Для этого в конструктор передаются аргументы. Что это даёт? А вот, что: 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); } } } Но опять же, это пока вы не дочитаете до наследования. Затем код придётся переписывать.
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 12.03.2017 в 21:37. |
Часовой пояс GMT +4, время: 09:51. |
|
« Предыдущая тема | Следующая тема » |
|
|