![]() |
|
||||||||||
|
|||||
|
Помогите кто чем может:
Есть машинка и надо, чтобы она двигалась в определенных пределах, а то она у меня очень плохо перемещеться. Также, как ей задать ускорение, плавное торможение и расход бензина (хотя бы простая полоска). Понмимаю что отчасти задействована физика, но не понмаю, поскольку что-то начинает постоянно глючить .Если кто-то знает по теме шаровую литературу, подскажите. P.S. вдруг чего, простите за оффтоп ![]() |
|
|||||
|
Регистрация: Mar 2006
Сообщений: 353
|
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;
}
}
}
Этот код повесь на машинку . расход топлива это временной счетчик если клавиша нажата то счетчик обратно считает .
__________________
Вильгельм Тель........... |
|
|||||
|
[+3 18.06.06]
Регистрация: Jun 2006
Сообщений: 113
|
Во втором коде ты с физизикой перемудрил в программирование нужна видимость физики а не изложение всей механики.
Я один раз увлекся и у меня для летящей стрелы расчитывалась по углу наклона площадь и по этой площади считалось её торможение в зависимости от направления ветра и трения о воздух... А потом я убраз 100-150 строчек кода и разница между стрелами была 1-2 пикселя) Так что физика не нужна И ещё лучше писать по схеме: if(){} else if(){}... Тогда если одна ифка сработала остальные не проверяются и это ускоряет код. Последний раз редактировалось PSoWP; 18.06.2006 в 02:33. |
|
|||||
|
Пасибки вам!!!
Тогда можжно еще один примитивный вопрос: что дает HitTest, Void: NaN. Просто я качнул книгу на английском читаю, но не все шарю, а на мне висит работа нехилая. Объесните тугим людям. |
|
|||||
|
Регистрация: Jun 2006
Сообщений: 4
|
HitTest - проверка на пересечение двух объектов.
Простой пример: |
|
|||||
square_mc.onPress = function() {
this.startDrag();
};
square_mc.onRelease = function() {
this.stopDrag();
if (this.hitTest(circle_mc)) {
trace("вы попали на круг");
}
};
this.hitTest(circle_mc). Мухобойка - на мухе Каомар - на языке лягушки и ТАК ДАЛЕЕ. Читайте справку. Там ВСЕ есть... in english Последний раз редактировалось iNils; 18.06.2006 в 18:09. |
|
|||||
|
Простите, с математикой не дружу, но почему в пример, навведеном в самом верху ( не на физике) не выполняеться условие по нажатию кнопок?????
|
|
|||||
|
Смотри:
Синтаксис храмает сверху в твоем примере. Пробуй так |
|
|||||
|
Да нет, смотри сообщение от Nidl. В в первом коде в дебаг вьювере значения xSpeed ySpeed постоянно дают значения NaN, тоесть как таково значения переменные не имеют. Вот я и спрашиваю, кто может объяснить почему так происходит?
|
|
|||||
|
|
![]() |
![]() |
Часовой пояс GMT +4, время: 15:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|