Просмотр полной версии : движок для игры-платформера
Подскажите, plz как создать движение камеры в платформенном движке. Все компоненты уже есть, только не знаю как сделать, чтобы пространство двигалось вместе с перемещением мувика
(как в приставочных играх)
Можно заюзать BitmapData, а в ней свойство scroll
а причем тут битмап, я не совсем понял. Мне-то нужно чтобы динамически прокручивалась местность.
а причем тут битмап, я не совсем понял. Мне-то нужно чтобы динамически прокручивалась местность.
Сначала почитай внимательно что такое bitmapData и как с этим работать. И вобще непонятно в чём проблема. Что мешает менять координаты или использовать scrollRect ?
а можно как-нибудь без этих классов?
_kv, а вы что, боитесь их? :)
2 __etc:
Многие начинающие боятся. Я тоже в своё время боялся. Из-за этого до сих пор классы - моё больное место. То есть, я их обычно не использую. Даже тогда, когда это было бы удобно. Но, стараюсь и в этом плане развиваться. ^_^
2 _kv:
Вообще без классов нельзя...
Вообще без классов нельзя...
жаль.
но ведь как-то же делали раньше до существования классов.
а исходник какой-нибудь по этой теме можете кто-нибудь порекомендовать. попробую повозиться.
классы существовали всегда =) Класс - это просто набор функций и переменных описывающих нужный тебе тип объекта. Просто написав:
var my_mc:MovieClip = _root.createEmptyMovieClip("my_mc", 0);
Ты уже используешь классы.
Я не уверен, что в твоем случае так уж нужен BitmapData, я бы строил наверное так:
(каким-то образом мы ведь узнаем где находится персонаж относительно всей карты)
- написал бы функцию центрирующую клип с персонажем и соответсвенно передвигающую карту. Вряд ли уровни игры на столько большие, что пришлось бы грузить их по частям. Т.е. нажимаем, предположим, кнопку '>' персонаж никуда не двигается, а двигается только карта. Просто изменяем ее координаты по Х, если персонаж упал\подпрыгнул - изменяем координаты по Y.
2 _kv:
Да, жили... С массивами и функциями. Но неужели такой панический страх перед классами? Вообще предлагаю посмотреть примеры Тонипы. Они для новичков понятны и там не описываются классы. ^_^
Искать на сайте gotoAndPlay.
написал бы функцию центрирующую клип с персонажем и соответсвенно передвигающую карту. Вряд ли уровни игры на столько большие, что пришлось бы грузить их по частям. Т.е. нажимаем, предположим, кнопку '>' персонаж никуда не двигается, а двигается только карта. Просто изменяем ее координаты по Х, если персонаж упал\подпрыгнул - изменяем координаты по Y.
Оно самое! Тока не знаю, как реализовать :)
Вообще предлагаю посмотреть примеры Тонипы. Они для новичков понятны и там не описываются классы. ^_^
Искать на сайте gotoAndPlay.
что это за сайт - gotoAndPlay :0
Но неужели такой панический страх перед классами?
нет. просто мне желательно бы скрипт написать в шестерке, и без внешних данных (.as)
2 _kv:
http://www.gotoandplay.it/_articles/2004/02/tonypa.php?PHPSESSID=4
var _keyListener:Object = {};
var pers:MovieClip = _root.attachMovie("pers", "pers", 2, {_x:Stage.width/2, _y:Stage.height/2});
var bg:MovieClip = _root.attachMovie("bg", "bg", 0, {_x:Stage.width/2, _y:Stage.height/2});
_keyListener.onKeyDown = function() {
switch (Key.getCode()) {
case Key.SPACE :
pers.shoot();
break;
case Key.LEFT :
if (bg._x-bg._width/2<-10) {
bg._x += 10;
}
break;
case Key.UP :
if (bg._y-bg._height/2<-10) {
bg._y += 10;
}
pers.jump();
break;
case Key.RIGHT :
if (bg._x+bg._width/2>Stage.width+10) {
bg._x -= 10;
}
break;
case Key.DOWN :
if (bg._y+bg._height/2>Stage.height+10) {
bg._y -= 10;
}
pers.duck();
break;
}
};
pers.shoot = function() {
this.gotoAndPlay("shoot");
};
pers.jump = function() {
this.gotoAndPlay("jump");
};
pers.duck = function() {
this.gotoAndPlay("duck");
};
Key.addListener(_keyListener);
Ну, это, конечно, на движек не претендует, но так, в общих чертах...
Исходник не выкладываю, вроде и так все понятно...
спасибо конечно, но это не то что нужно. я пытался внедрить в свой файл различные скрипты из предложенного, но там есть одна проблема - программное построение карты
пытался повозиться, модифицировал коды из разных движков- получилось вот это, но вот оно почему-то не прокручивается
http://www.daylarts.ru/Untitled-3.fla
ну так а с какой стати карта должна прокручиваться если ты ее вообще не двигаешь, а двигаешь персонажа? =) То, что ты делаешь - не логично. Персонаж должен быть все время по центру, а _какрта_ должна двигаться.
Ну, если совсем просто: допиши во всех местах, где ты двигаешь персонажа смещение для _root'a такое же, как и для персонажа, только со зеаком минус =)
onClipEvent (load) {
_root.speed = 4.2;
gravity = 1;
jump = 15;
_root.speedy = 0;
}
onClipEvent (enterFrame) {
_x += _root.speedx;
_y += _root.speedy;
_root._x -= _root.speedx;
_root._y -= _root.speedy;
if (_root.area.hitTest(_x, _y+_height/2, true) == false) {
fall1 = true;
} else {
fall1 = false;
}
if (_root.area.hitTest(_x-_width/2, _y, true) == false and _root.area.hitTest(_x-_width/4, _y+_height/4, true) == false) {
fall2 = true;
} else {
fall2 = false;
_x += 0.21;
}
if (_root.area.hitTest(_x+_width/2, _y, true) == false and _root.area.hitTest(_x+_width/4, _y+_height/4, true) == false) {
fall3 = true;
} else {
fall3 = false;
_x -= 0.21;
_root._x += 0.21;
}
if (fall1 == true and fall2 == true and fall3 == true) {
_root.speedy += gravity;
} else {
_root.speedy = 0;
}
if (fall1 == false and fall2 == false and fall3 == false) {
_y -= 1;
_root._y += 1;
}
if (Key.isDown(Key.LEFT)) {
if (_root.area.hitTest(_x-_width/2, _y, true) == false and _root.area.hitTest(_x-_width/4, _y+_height/5, true) == false) {
_x -= _root.speed;
_root._x += _root.speed;
}
}
if (Key.isDown(Key.RIGHT)) {
if (_root.area.hitTest(_x+_width/2, _y, true) == false and _root.area.hitTest(_x+_width/4, _y+_height/5, true) == false) {
_x += _root.speed;
_root._x -= _root.speed;
}
}
if (Key.isDown(68)) {
_root.clipper.gotoAndStop("jump");
if (fall1 == false or fall2 == false or fall3 == false) {
_root.speedy = -jump;
}
}
if (_root.area.hitTest(_x, _y-_height/2, true) == true) {
_root.speedy = 2.1;
_root.clipper.gotoAndStop("head");
}
}
thanks. вроде бы все работает, только кое-где на стенах глючит.
PS я как выяснилось отправил старую версию, в ней еще не было кода прокрутки=)
единственная проблема нового кода - когда остановить персонажа у левой стены и надавить клавишу "влево", _root ни с того ни с сего смещается на 1 пиксел влево. :)
я, если честно, не лез разбираться, как высчитывается скорость, ошибка где-то там...
скорее всего, значения скоростей в координатах и движении должны быть прямо пропорциональные. сейчас попробую разобраться.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.