Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Разработка модели "куклы" персонажа и влияющего на его характеристики "шмота" (http://www.flasher.ru/forum/showthread.php?t=177329)

PlutDem 29.03.2012 19:28

Разработка модели "куклы" персонажа и влияющего на его характеристики "шмота"
 
Здравствуйте, есть персонаж с различными характеристиками и у него есть слоты под предметы, при добавлении которых(предметов) меняются характеристики персонажа (По сути то, что есть почти в каждой RPG).
Как это грамотно реализовать? Мне пришло на ум, только добавить в объект предмета все характеристики какие могут быть и прибавлять их значение к параметрам персонажа
Код AS3:

class Person {
 
        public var str = 10;
        public var dex = 7;
        public var con  = 0;
        ...
 
        function addItem(item):void {
        str += item.str;
        dex += item.dex;
        con += item.con;
        ...
        }
}

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

TanaTiX 29.03.2012 19:48

Свойства не публичные, а геттеры.
При добавлении/снятии объекта (не забываем про типизацию) пересчитываем только актуальные свойства и только при добавлении/снятии. За результирующие свойства отвечают отдельные переменные.

Эта 1000 будет находится на сцене одновременно?

PlutDem 29.03.2012 20:09

Цитата:

Сообщение от TanaTiX (Сообщение 1071836)
пересчитываем только актуальные свойства

Вроде этого?
Код AS3:

function addItem(item):void {
 
        if(item.str)
                str += item.str;
        if(item.dex)
                dex += item.dex;
        if(item.con)
                con += item.con;
        ...
        }

Цитата:

Сообщение от TanaTiX (Сообщение 1071836)
Эта 1000 будет находится на сцене одновременно?

Угу, причем возможно не одна, а раз эдак в 8 больше. Потому то и хранить в предмете данные о всех характеристиках не хочется.

alatar 29.03.2012 20:21

Цитата:

Вроде этого?
Вроде этого.

warsem 29.03.2012 20:27

я когда то так делал, но это был не АС :)

Код AS3:

class Person {
  // базовые статы
  var basa_str:int = 10;
  var basa_dex:int = 15;
 
  // текущие параметры
  var str:int;
  var dex:int;
 
  // функция, вызваетца каждый раз, как что-то сняли/одели/т.п.
  function recheckStats():void {
      str = basa_str;
      if (одета шапка) { str+=шапка.str; }
      if (одеты труселя) { str+=труселя.str; }
      ...
  }
 
 
}


TanaTiX 29.03.2012 21:17

Цитата:

Угу, причем возможно не одна, а раз эдак в 8 больше.
Мне уже страшно.
Цитата:

Вроде этого?
Нет, вроде того, что предложил alatar.

PlutDem 29.03.2012 21:55

Декоратор, штука, конечно, хорошая, но проблему с хранением лишних свойств(бонусов) в предмете не решает.
Код AS3:

str = 10;
dex = 0;
con  = 0;
...

Зачем хранить dex,con и т.п. если бонус только к str ? На каждый предмет отдельный декоратор не создать, не говоря уже о том. что постоянное использование декоратора на объекте в конечном итоге приведет к снижению производительности.

TanaTiX 29.03.2012 22:23

Это не проблема лишних свойств. Они (свойства) сидят себе в объектах и кушать не просят. Это проблема архитектуры.

PlutDem 29.03.2012 22:27

Цитата:

Сообщение от TanaTiX (Сообщение 1071877)
Это не проблема лишних свойств. Они (свойства) сидят себе в объектах и кушать не просят. Это проблема архитектуры.

Как же? Тысячи объектов(предметов), в них еще штук 20 объектов-свойств(характеристик). Все это отхватит приличный кусок памяти.

anmelegov 29.03.2012 23:01

я думаю не играбельно будет даже если принебречь производительностью (фпс скорее всего будет меньше единицы)


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

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