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

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

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

Регистрация: Jun 2009
Сообщений: 81
Question QuickBox объект создается не там где должен

Есть код, где при нажатой клавише создается перевернутый объект, и при отпущенной клавише возвращается прежний. Только вот при возврате, объект как будто подпрыгивает. Уже все перерыл, не могу понять в чем дело. Вроде вычисление правильные: берем Y и плюсуем 40 px и обратно минусуем, разница между центром двух объектов ровно 40.
Код AS3:
package{
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;
	import flash.net.*;
	import flash.text.*;
	import flash.utils.*
	import com.actionsnippet.qbox.*;
	import Box2D.*;
	public class test extends Sprite{
		var sim:QuickBox2D;
		private var hero:QuickObject;
		var bol:Boolean =false;
		public function test() {
    			this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
    		}
 
    		public function onAddedToStage(e: Event): void {
			removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
				sim = new QuickBox2D(con);
				sim.addBox({x:447/30, y:622.5/30, width:910/30, height:37/30, density:0});
				hero = sim.addBox({x:300/30, y:529/30, width:89.8/30, height:150/30, density:0.07,allowSleep:false,restitution:0.0,fixedRotation:true});
				stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyPressed);
				stage.addEventListener(KeyboardEvent.KEY_UP, onKeyReleased);
				sim.start();
			}
			function onKeyPressed(evt:KeyboardEvent):void {
				if(!bol){
					bol = true
				var ySave:Number = hero.y+(40/30);
				hero.destroy();
				hero = sim.addBox({x:300/30, y:ySave, width:118/30, height:70/30, density:0.07,allowSleep:false,restitution:0.0,fixedRotation:true});
				}
			}
			function onKeyReleased(evt:KeyboardEvent):void {
				if(bol){
				bol = false
				var ySave:Number = hero.y-(40/30);
				hero.destroy()
				hero = sim.addBox({x:300/30, y:ySave, width:89.8/30, height:150/30, density:0.07,allowSleep:false,restitution:0.0,fixedRotation:true});
				}
			}
	}
}
http://serg1992.ucoz.com/test.swf
Вложения
Тип файла: rar test.fla.rar (203.6 Кб, 26 просмотров)


Последний раз редактировалось GoodWin74; 11.08.2012 в 01:59.
Старый 12.08.2012, 00:17
GoodWin74 вне форума Посмотреть профиль Отправить личное сообщение для GoodWin74 Найти все сообщения от GoodWin74
  № 2  
Ответить с цитированием
GoodWin74
 
Аватар для GoodWin74

Регистрация: Jun 2009
Сообщений: 81
По умолчанию заранее спасибо

Буду признателен за помощь!

Старый 12.08.2012, 23:05
Anton Riot вне форума Посмотреть профиль Отправить личное сообщение для Anton Riot Посетить домашнюю страницу Anton Riot Найти все сообщения от Anton Riot
  № 3  
Ответить с цитированием
Anton Riot

Регистрация: Sep 2008
Адрес: Москва
Сообщений: 291
Отправить сообщение для Anton Riot с помощью ICQ
А координата задаётся для центра, не левого верхнего угла?

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

Регистрация: Jun 2009
Сообщений: 81
Да для центра, дело в том, что если ставить плотность(density) равное нулю, то все нормально, а вот если есть плотность, то вот такой бред получается, как будто объект создается выше, чем заданны координаты... Даже не знаю на что думать.

Добавлено через 8 минут
Вот код и рабочий пример density = 0
http://pastebin.com/RvixHGht

http://serg1992.ucoz.com/test2.swf

Добавлено через 11 минут
Есть подозрение, что Box не успевает удалить объект, и создает новый на нем, и из-за этого получается толчок вверх, а после удаление он падает. Но если это так, то как прослушать событие удаления?

Добавлено через 28 минут
В итоге так и получилось, если не слушать удаление, то можно просто переместить до удаления объект:
Код AS3:
var ySave:Number = hero.y-(40/30);
hero.x = 1000;
hero.destroy();
hero = sim.addBox({x:300/30, y:ySave, width:89.8/30, height:150/30, density:1,allowSleep:false,restitution:0.0,fixedRotation:true});
Если есть еще предложения, буду рад


Последний раз редактировалось GoodWin74; 13.08.2012 в 08:47.
Старый 13.08.2012, 11:37
Anton Riot вне форума Посмотреть профиль Отправить личное сообщение для Anton Riot Посетить домашнюю страницу Anton Riot Найти все сообщения от Anton Riot
  № 5  
Ответить с цитированием
Anton Riot

Регистрация: Sep 2008
Адрес: Москва
Сообщений: 291
Отправить сообщение для Anton Riot с помощью ICQ
Имхо вам надо было в раздел API приложений и сред, это же по Box2D вопрос, получается.
А зачем удалять и заново создавать объект, если можно его просто повернуть?

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

Регистрация: Jun 2009
Сообщений: 81
дело в том что скин тоже поворачивается, и когда анимация персонажа переходит на кадр "лежать" или сидеть и тд, скин будет отображен не корректно(вертикально и сжат) и приходится пересоздавать объект

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:38.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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