Просмотр полной версии : Интерактивность
Помогите кто чем может:
Есть машинка и надо, чтобы она двигалась в определенных пределах, а то она у меня очень плохо перемещеться.
Также, как ей задать ускорение, плавное торможение и расход бензина (хотя бы простая полоска). Понмимаю что отчасти задействована физика, но не понмаю, поскольку что-то начинает постоянно глючить:confused: .
Если кто-то знает по теме шаровую литературу, подскажите.
P.S. вдруг чего, простите за оффтоп:rolleyes:
onClipEvent (load) {
thrust = 2;
maxSpeed = 4;
}
onClipEvent (enterFrame) {
if (Key.isDown(Key.RIGHT)) {
this._rotation += 3;
}
if (Key.isDown(Key.LEFT)) {
this._rotation -= 3;
}
if (Key.isDown(Key.UP)) {
xSpeed += thrust*Math.sin(_rotation*(Math.PI/180));
ySpeed += thrust*Math.cos(_rotation*(Math.PI/180));
} else {
xSpeed *= decay;
ySpeed *= decay;
}
if (Key.isDown(Key.DOWN)) {
xSpeed -= thrust*Math.sin(_rotation*(Math.PI/180));
ySpeed -= thrust*Math.cos(_rotation*(Math.PI/180));
}
speed = Math.sqrt((xSpeed*xSpeed)+(ySpeed*ySpeed));
if (speed>maxSpeed) {
xSpeed *= maxSpeed/speed;
ySpeed *= maxSpeed/speed;
}
_y -= ySpeed;
_x += xSpeed;
}
или если с физикой то вот еще пример :
onClipEvent (load) {
this.dam = 0;
this.br = 0.06;
var MAXspeed = 5;
var frontMAXspeed = -1;
this.a = 0.01;
this.b = 0.02;
var aksel_koeff = a+b;
var BreakPathKoeff = 0.005;
var Akseleration = 0;
this.nosz._alpha = 0;
this._rotation = 90;
this.fuel = 80;
this.x0 = 100;
this.nos = 0;
this.ch = 0;
}
onClipEvent (enterFrame) {
if (this.Akseleration>0) {
if (Key.isDown(Key.RIGHT)) {
if (this.lw._rotation<35) {
this.lw._rotation++;
this.rw._rotation++;
}
if (Akseleration>0) {
this._rotation += afront;
} else if (Akseleration<0) {
this.arear = math.atan((Akseleration-1)*-Akseleration*2.4);
this._rotation += arear;
}
} else if (Key.isDown(Key.LEFT)) {
if (this.lw._rotation>-35) {
this.lw._rotation--;
this.rw._rotation--;
}
if (Akseleration>0) {
this._rotation -= afront;
} else if (Akseleration<0) {
this.arear = math.atan((Akseleration-1)*-Akseleration*2.4);
this._rotation -= arear;
}
} else if (!Key.isDown(Key.RIGHT) && !Key.isDown(Key.LEFT)) {
this.lw._rotation = 0;
this.rw._rotation = 0;
}
var brake_koeff = br;
} else if (Akseleration<0) {
var brake_koeff = -br*2;
}
this._x = this.vx+this.x0;
this._y = this.vy+this.x0;
if (Key.isDown(Key.ENTER)) {
if (this.Akseleration<3) {
this.dl.play();
this.ch = 1;
point = new Object();
point.x = mc3._x;
point.y = mc3._y;
localToGlobal(point);
_root.man._x = point.x;
_root.man._y = point.y;
_root.mcc._x = point.x;
_root.mcc._y = point.y;
}
}
if (this.hitTest(_root.w)) {
_root.ma._alpha = 100;
_root.ma._x = _x;
_root.ma._y = _y;
_root.ma._rotation = _rotation;
} else if (this.hitTest(_root.p)) {
_root.ma._alpha = 100;
_root.ma._x = _x;
_root.ma._y = _y;
_root.ma._rotation = _rotation;
} else {
if (_root.ma._alpha>0) {
_root.ma._alpha -= 5;
}
}
this.vx += akseleration*math.sin(this._rotation*(math.pi/180));
this.vy -= akseleration*math.cos(this._rotation*(math.pi/180));
this.afront = math.atan((akseleration+1)*akseleration*2.4);
if (Key.isDown(Key.UP)) {
if (this.key.isdown(Key.SHIFT) && this.nos>0) {
this.nosz._alpha = 100;
this.nos -= 1;
if (this.Akseleration<this.maxspeed) {
this.Aksel_koeff = a+b*1.5;
}
} else {
this.Aksel_koeff = a+b;
this.nosz._alpha = 0;
}
if (this.Akseleration<this.MAXSpeed) {
this.Akseleration += aksel_koeff;
}
} else if (Key.isDown(Key.DOWN)) {
this.Akseleration -= brake_koeff;
}
if (!Key.isDown(Key.UP) && !Key.isDown(Key.DOWN)) {
if (this.Akseleration>0) {
this.Akseleration -= BreakPathKoeff;
if (this.Akseleration<0) {
this.Akseleration = 0;
}
} else if (this.Akseleration<0) {
this.Akseleration += BreakPathKoeff;
if (this.Akseleration>0.5) {
this.Akseleration = 0;
}
}
if (Key.isDown(Key.SPACE)) {
this.Akseleration /= 1.06;
}
}
}
Этот код повесь на машинку .
расход топлива это временной счетчик если клавиша нажата то счетчик обратно считает .
Во втором коде ты с физизикой перемудрил в программирование нужна видимость физики а не изложение всей механики.
Я один раз увлекся и у меня для летящей стрелы расчитывалась по углу наклона площадь и по этой площади считалось её торможение в зависимости от направления ветра и трения о воздух...
А потом я убраз 100-150 строчек кода и разница между стрелами была 1-2 пикселя) Так что физика не нужна
И ещё лучше писать по схеме:
if(){} else if(){}...
Тогда если одна ифка сработала остальные не проверяются и это ускоряет код.
Пасибки вам!!!
Тогда можжно еще один примитивный вопрос: что дает
HitTest, Void: NaN. Просто я качнул книгу на английском читаю, но не все шарю, а на мне висит работа нехилая. Объесните тугим людям.
hochoolaski
18.06.2006, 17:56
HitTest - проверка на пересечение двух объектов.
Простой пример:
if(объект1.hitTest(объект2))
{....}
square_mc.onPress = function() {
this.startDrag();
};
square_mc.onRelease = function() {
this.stopDrag();
if (this.hitTest(circle_mc)) {
trace("вы попали на круг");
}
};hitTest() - метод, который возвращает true, если, как в примере, при перетаскивании мы попали на клип, записаныый в скобках
this.hitTest(circle_mc).
Мухобойка - на мухе
Каомар - на языке лягушки и ТАК ДАЛЕЕ.
Читайте справку. Там ВСЕ есть... in english
Простите, с математикой не дружу, но почему в пример, навведеном в самом верху ( не на физике) не выполняеться условие по нажатию кнопок?????
Смотри:
on (keyPress "<Left>") {
this._x -= 10;
}
on (keyPress "<Right>") {
this._x += 10;
}
on (keyPress "<Enter>") {
trace("Ого! Вводом балуетесь.");
}
Синтаксис храмает сверху в твоем примере. Пробуй так
Да нет, смотри сообщение от Nidl. В в первом коде в дебаг вьювере значения xSpeed ySpeed постоянно дают значения NaN, тоесть как таково значения переменные не имеют. Вот я и спрашиваю, кто может объяснить почему так происходит?
http://flasher.ru/forum/attachment.php?attachmentid=14534&stc=1&d=1150866067
K.A.T.A.F.A.L.K.E.R
21.06.2006, 12:57
значения xSpeed ySpeed постоянно дают значения NaN
дам несколько очепяток - измени onClipEvent(load){...} на этот (и поставь fps где-то 50):
onClipEvent (load) {
thrust = 0.1;
maxSpeed = 4;
xSpeed = 0;
ySpeed = 0;
decay = 0.95;
}
Шас проверю, в принципе должно выйти.
Спасибо.
З.Ы. UA Rulezzzz
Люди!!! Ау!!!
как называеться - чем дальше в лес тем больше дров.
1.Насчет интерактивности с машиной проблем нет, возникла другая:
Как сделать чтобы my_mc плавно "плыл" за мышкой в форме чего-то. И при остановке движения мыши - плавно тормозил?
2.Я делаю hitTest типа "машина" и "бровка".
Что надо указать чтобы при этом машина "врезалась" и не могла проехать ни при каких обстоятельтвах.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.