![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Dec 2010
Адрес: арх. обл.
Сообщений: 38
|
Здравствуйте! Сделал я код для проверки столкновений бонуса и героя. вот что получилось:
тут появляется бонус: package ru.RainbowAdventure { import flash.display.Sprite; import flash.display.MovieClip; import flash.events.Event; public class Universe extends Sprite { public static var bon:Boolean = false; public static var grid:MovieClip = new MovieClip(); public static var bonus:MovieClip = new MovieClip(); public static var wall:MovieClip; public static const MAP_WIDTH_MAX:int = 30; public static const MAP_HEIGHT_MAX:int = 20; public static const MAP_CELL_SIZE:int = 24; public static const STATE_CELL_FREE:int = 1; public static const STATE_CELL_BUSY:int = 2; private var levelLength:Number = 20; private var levelVeigth:Number = 30; public function Universe() { addEventListener(Event.ADDED_TO_STAGE, init); } private function init(event:Event):void { removeEventListener(Event.ADDED_TO_STAGE, init); addBonus(); trace("Univerze initialized..."); } private function addBonus() { if (bon == false) { bonus = new Bonus_mc ; bonus.y != grid.y; bonus.x != grid.x; bonus.x = Math.ceil(Math.random() * 18) * 20 + 10; bonus.y = Math.ceil(Math.random() * 18) * 20 + 10; bonus.gotoAndStop(1); bon = true; addChild(bonus); trace("Bon =",bon); } trace("Bonus initialized..."); } } } package ru.RainbowAdventure.Characters { import flash.display.*; import flash.events.*; import flash.ui.*; import flash.utils.*; import flash.text.*; import ru.RainbowAdventure.Universe; public class Hero extends ru.RainbowAdventure.Universe { public static var grid:MovieClip; public static var ball:MovieClip; public static var bonuses:MovieClip; public static var bon:Boolean; public var container_hero:MovieClip; public var p:int; public function Hero() { addEventListener(Event.ADDED_TO_STAGE, init); } private function init(event:Event):void { grid = Universe.grid; bonus = Universe.bonus; removeEventListener(Event.ADDED_TO_STAGE, init); addHero(); stage.addEventListener(Event.ENTER_FRAME, stolknovenie); stage.addEventListener(KeyboardEvent.KEY_DOWN, keyControl); trace("Hero initialized..."); } if (bonus.hitTestPoint(ball.x,ball.y,true)) { bon = false; removeChild(bonus); } } } } пытался разобраться но не выходит. и еще иногда бонус появляется на grid хотя прописано,что координаты бонуса не равны координатам грида. помогите пожалуйста Последний раз редактировалось udaaff; 18.01.2011 в 21:22. |
|
|||||
|
Регистрация: Mar 2010
Сообщений: 117
|
Ошибка происходит из-за:
Просто кажется нужно написать так: В функцие добавления бонуса: private function addBonus() { if (bon == false) { bonus = new Bonus_mc ; bonus.y != grid.y; bonus.x != grid.x; bonus.x = Math.ceil(Math.random() * 18) * 20 + 10; bonus.y = Math.ceil(Math.random() * 18) * 20 + 10; bonus.gotoAndStop(1); bon = true; bonus.name = "bonus";//Добавте вот такую строчку.-------------------------- addChild(bonus); trace("Bon =",bon); } trace("Bonus initialized..."); } Если ошибка повторится то замените: На: Добавлено через 4 минуты Не успел дописать. Если вы будете крипить бонусов больше одного, то имена должны быть разные. Я делаю так: var nd:int = 0; function addBonus():void { bonus = new Bonus_mc ; bonus.y != 100; bonus.x != 100; bonus.name = "bonus"+nd;//Имя бонуса будет bonus0, следующего bonus1... nd++; addChild(bonus); } Добавлено через 46 минут Время свободное выдалось. По поводу второго вопроса: Вообще не видал, что бы так писали. Но рас уж компилятор обработал и допустим всё работает то вот ответ: Для компьютера координаты не равны, а вот на глаз не скажешь, т.к. разница всего лиш в пиксель. Но в таком случае нужно не так делать, а проверку после random ставить. |
|
|||||
|
что-то не то помойму....
проверте куда вы бонус добавляете, и откуда вы его удаляете Добавлено через 2 минуты вот пример: Цитата:
|
|
|||||
|
[+1 15.01.11]
Регистрация: Jan 2011
Сообщений: 70
|
плакал.
мое ИМХО- бонус причалдился к Universe, а удалить ты его пытаешься из Hero. Тебе надо в hero поиметь ссылку на Universe и сделать Universe.removeChild() trace(bonus.parent) должно спасать. и что-то вроде hasChild было. не помнить (( |
|
|||||
|
Регистрация: Dec 2010
Адрес: арх. обл.
Сообщений: 38
|
хм.сделал как вы все посоветовали, но тут вот в чем проблема: бонус в начале игры создается, затем при контакте с героем удаляется и больше не появляется. попробовал сделать function addBonus() такой: function addBonus(e:Event) но результат тот же(слушателя добавил правильно, он работает). возможно что переменная бон каким-то образом не работает(не сообщается между классами):в классе Юниверзе создается бонус, т.е. бон = тру, а в классе Херо он удаляется,т.е. бон = фолз. как сделать чтоб новый бонус появлялся при удалении предыдущего?
ПЫ.СЫ Возник вопрос не по теме, возможно кто знает. Где можно посмотреть алгоритмы для движения врагов как в пачмане? думал сам но логика не придумывается. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
по-моему лучше сделать функцию удаления внутри самого класса бонуса:
public function removeMe():void { if (this.parent.contains(this)) this.parent.removeChild(this); } п.с. Такую запись: можно заменить такой: |
|
|||||
|
Регистрация: Dec 2010
Адрес: арх. обл.
Сообщений: 38
|
Извените, но или я чего-то не понял, или вы не прочитали мой предыдущий пост:
Цитата:
|
|
|||||
|
Вообще Hero должен диспатчить событие. "MOVED" или что то в этом роде. А уже Universe проверять что к чему. Просто Ваш Hero может столкнуться и с ямой, и с врагом, и с черной дырой, и с многими прелестями Вашего игрового мира. Вы собираетесь описывать все данные случаи в классе Hero?
__________________
ranga |
|
|||||
|
[+1 15.01.11]
Регистрация: Jan 2011
Сообщений: 70
|
я бы так делал примерно. Не претендует, просто идея.
Добавлено через 4 минуты Цитата:
|
|
|||||
|
Регистрация: Dec 2010
Адрес: арх. обл.
Сообщений: 38
|
ой простите за тупой вопрос, но как функцию, созданную в одном массиве, вызвать в другом. посмотрел в поиске но не нашел почему то. Universe(ссылка на класс).addBonus(ссылка на функцию) не работает
|
![]() |
![]() |
Часовой пояс GMT +4, время: 03:43. |
|
|
« Предыдущая тема | Следующая тема » |
|
|