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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.07.2010, 14:49
dkrstudio вне форума Посмотреть профиль Отправить личное сообщение для dkrstudio Найти все сообщения от dkrstudio
  № 1  
Ответить с цитированием
dkrstudio
[+1.3 20.07.10]

Регистрация: Jul 2010
Сообщений: 24
По умолчанию Implicit coercion of a value of type Boolean to an unrelated type Number.

Выдает 1067: Implicit coercion of a value of type Boolean to an unrelated type Number.

Код:
	if (up) {
		speed+=power && speed < maxSpeed;
	}
	if (down) {
		speed-=power && speed < maxDownSpeed;
		//speed = -1;
	}
Код:
var maxSpeed:Number = 10;
var maxDownSpeed:Number = 1;
До создания дополнительного условия, && speed < maxDownSpeed символ двигался максимально со скоростью 10, при нажатой up. При нажатой down двигался в обратную сторону с ускорением и без ограничения. Так как каждый раз к speed прибавлялось power = 0.3/ All Var:Number. Up and Down type boolean.
Как только дописал && speed < maxDownSpeed выводится ошибка.
Что за ошибка?

Код:
1067: Implicit coercion of a value of type Boolean to an unrelated type Number.
И если проблема в действиями над числами то какой знак нужно поставить чтобы при up символ разгонялся до 10. и не больше. при down скорость снижалась до -1?

Добавлено через 2 минуты
Ответте плз. в математике еще нубее.

Старый 20.07.2010, 14:57
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 2  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
Попробуй так:
Код AS3:
if (up && speed < maxSpeed) {
  speed+=power ;
}
if (down && speed > maxDownSpeed) {
  speed-=power;
}


Последний раз редактировалось Tr1te; 20.07.2010 в 15:10.
Старый 20.07.2010, 15:17
dkrstudio вне форума Посмотреть профиль Отправить личное сообщение для dkrstudio Найти все сообщения от dkrstudio
  № 3  
Ответить с цитированием
dkrstudio
[+1.3 20.07.10]

Регистрация: Jul 2010
Сообщений: 24
обьект останавливается и при нажатой down продолжает движение вперед. Назад так и не двигается

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
наверное, имеет смысл выложить немного больше кода

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

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Я так делаю.
Код AS3:
speed+=power;
speed = speed < maxSpeed ? speed : maxSpeed;
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 20.07.2010, 16:04
dkrstudio вне форума Посмотреть профиль Отправить личное сообщение для dkrstudio Найти все сообщения от dkrstudio
  № 6  
Ответить с цитированием
dkrstudio
[+1.3 20.07.10]

Регистрация: Jul 2010
Сообщений: 24
Код AS3:
// Типа boolean
var up:Boolean=false;
var down:Boolean=false;
var left:Boolean=false;
var right:Boolean=false;
var brake:Boolean=false;
// Клавиша нажата
stage.addEventListener(KeyboardEvent.KEY_DOWN, key_Down);
function key_Down(e:KeyboardEvent):void {
	if (e.keyCode==38) {
		up=true;
	}
	if (e.keyCode==40) {
		down=true;
	}
	if (e.keyCode==37) {
		left=true;
	}
	if (e.keyCode==39) {
		right=true;
	}
	if (e.keyCode==32) {
		brake=true;
	}
}
// Клавиша отпушена
stage.addEventListener(KeyboardEvent.KEY_UP, key_Up);
function key_Up(e:KeyboardEvent):void {
	if (e.keyCode==38) {
		up=false;
	}
	if (e.keyCode==40) {
		down=false;
	}
	if (e.keyCode==37) {
		left=false;
	}
	if (e.keyCode==39) {
		right=false;
	}
	if (e.keyCode==32) {
		brake=false;
	}
}
 
addEventListener(Event.ENTER_FRAME, movieCar);
// Переменные
var power:Number=0.3;
 
var friction:Number=0.95;
var braking:Number=0.85;// тормоз
var deceleration:Number=0.87;
var speed:Number=0;
 
var maxSpeed:Number=10;
var maxDownSpeed:Number=1;
 
var gradusRot:Number=2.4;
var gradus:Number=0;
var radian:Number;
var speedX:Number;
var speedY:Number;
 
function movieCar(e:Event):void {
	if (up) {
		speed+=power&&speed<maxSpeed;
	}
	if (down) {
		speed-=power;
		//speed = -1;
	}
	if ((left) && (up) || (left) && (down)) {
 
		gradus-=gradusRot;
	}
	if ((right) && (up) || (right) && (down)) {
 
		gradus+=gradusRot;
	}
	if (brake) {
		speed*=braking;
 
	}
 
	radian = (gradus * Math.PI)/180;
	speedX=speed*Math.cos(radian);
	speedY=speed*Math.sin(radian);
	MyCar.rotation=gradus;
	MyCar.x+=speedX;
	MyCar.y+=speedY;
 
 
	var MyCarW:Number=MyCar.width/2;
	var MyCarH:Number=MyCar.height/2;
	/*координаты сцены + половину ширины или высоты обьекта*/
	if (MyCar.x>550+MyCarW) {
		MyCar.x = 0 - (MyCarW);
	}
	if (MyCar.x < 0 -(MyCarW)) {
		MyCar.x=550+MyCarW;
	}
	if (MyCar.y>600+MyCarH) {
		MyCar.y = 0 - (MyCarH);
	}
	if (MyCar.y < 0 -(MyCarH)) {
		MyCar.y=600+MyCarH;
	}
 
}
Добавлено через 1 минуту
Проблемы: нет предела скорости при нажатой down. поворот возможен только при нажатой up. Не знаю как зделать возможность поворачивать когда скорость выше (не знаю даже чего)

Добавлено через 4 минуты
ошибка выдается
Код AS3:
if (down) {
speed-=power; //в этой строке
//speed = -1;
}
Добавлено через 7 минут
что означают операторы в твоем коде?
не могу понять. весь день бошку ломаю. разясни плз


Последний раз редактировалось udaaff; 20.07.2010 в 16:57.
Старый 20.07.2010, 16:18
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 7  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
Предел максимальной скорости так надо:
Код AS3:
var maxSpeed:int=10;
if (up) {
  if(speed<maxSpeed){
    speed+=power;
  }else{
    speed=maxSpeed;
  }
}
Для минимальной:
Код AS3:
var minSpeed:int=1;
if (down) {
  if(speed>minSpeed){
    speed-=power;
  }else{
    speed=minSpeed;
  }
}
При всем при этом у тебя минимальная скорость будет 1, тоесть ты можешь уменьшать скорость до минимума =1, это ты будешь двигаться вперед, чтобы он двигался назад надо:
Код AS3:
var minSpeed:int=-1;

Старый 20.07.2010, 16:19
dkrstudio вне форума Посмотреть профиль Отправить личное сообщение для dkrstudio Найти все сообщения от dkrstudio
  № 8  
Ответить с цитированием
dkrstudio
[+1.3 20.07.10]

Регистрация: Jul 2010
Сообщений: 24
+ движение вперед, - назад. он и нужен кажись.
Цитата:
Видать приблизится к разработчикам NFS мне не светит!

Старый 20.07.2010, 16:24
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 9  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
Ну потому что у тебя нижняя скорость не -1, а 1, по этому ты продолжаешь двигаться вперед. А ошибка из-за того что ты не правильный синтаксис выдал, сделай по аналогии как в верхнем посту. Тольуо минимальную скорость поставь -1.

Старый 20.07.2010, 16:27
dkrstudio вне форума Посмотреть профиль Отправить личное сообщение для dkrstudio Найти все сообщения от dkrstudio
  № 10  
Ответить с цитированием
dkrstudio
[+1.3 20.07.10]

Регистрация: Jul 2010
Сообщений: 24
да говорю же. максимальная скорость движения вперед - maxSpeed,
а движения назад - maxDownSpeed. при твоем коде. ни чего не изменяется. сивол так и движется вперед но уже с maxDownSpeed, чему бы не было равно

Добавлено через 54 секунды
и тип инт не чего не изменит. та ведь целые числа. поэтому скорость лиш становится рывком. а чтобы было плавно я взял Number

Добавлено через 21 минуту
Да спасибо все работает как надо. можеш еше подсказать как вывести скорость. trace выводит много чисел. если в динамическое будет тоже дофига чисел. как зделать чтобы они обновлялись а лучше чтоб можно было связать с стрелкой

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

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

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


 


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


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