Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   движок для игры-платформера (http://www.flasher.ru/forum/showthread.php?t=86857)

_kv 26.10.2006 16:50

Цитата:

написал бы функцию центрирующую клип с персонажем и соответсвенно передвигающую карту. Вряд ли уровни игры на столько большие, что пришлось бы грузить их по частям. Т.е. нажимаем, предположим, кнопку '>' персонаж никуда не двигается, а двигается только карта. Просто изменяем ее координаты по Х, если персонаж упал\подпрыгнул - изменяем координаты по Y.
Оно самое! Тока не знаю, как реализовать :)

Цитата:

Вообще предлагаю посмотреть примеры Тонипы. Они для новичков понятны и там не описываются классы. ^_^
Искать на сайте gotoAndPlay.
что это за сайт - gotoAndPlay :0

_kv 26.10.2006 16:57

Цитата:

Но неужели такой панический страх перед классами?
нет. просто мне желательно бы скрипт написать в шестерке, и без внешних данных (.as)

Хемуль 26.10.2006 22:50

2 _kv:
http://www.gotoandplay.it/_articles/...hp?PHPSESSID=4

wvxvw 27.10.2006 08:43

Код:

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);

Ну, это, конечно, на движек не претендует, но так, в общих чертах...
Исходник не выкладываю, вроде и так все понятно...

_kv 27.10.2006 15:58

спасибо конечно, но это не то что нужно. я пытался внедрить в свой файл различные скрипты из предложенного, но там есть одна проблема - программное построение карты

пытался повозиться, модифицировал коды из разных движков- получилось вот это, но вот оно почему-то не прокручивается

http://www.daylarts.ru/Untitled-3.fla

wvxvw 27.10.2006 16:08

ну так а с какой стати карта должна прокручиваться если ты ее вообще не двигаешь, а двигаешь персонажа? =) То, что ты делаешь - не логично. Персонаж должен быть все время по центру, а _какрта_ должна двигаться.
Ну, если совсем просто: допиши во всех местах, где ты двигаешь персонажа смещение для _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");
        }
}


_kv 27.10.2006 16:21

thanks. вроде бы все работает, только кое-где на стенах глючит.

PS я как выяснилось отправил старую версию, в ней еще не было кода прокрутки=)

_kv 27.10.2006 16:23

единственная проблема нового кода - когда остановить персонажа у левой стены и надавить клавишу "влево", _root ни с того ни с сего смещается на 1 пиксел влево. :)

wvxvw 27.10.2006 17:11

я, если честно, не лез разбираться, как высчитывается скорость, ошибка где-то там...

_kv 27.10.2006 17:17

скорее всего, значения скоростей в координатах и движении должны быть прямо пропорциональные. сейчас попробую разобраться.


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

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