Суббота, 20 Апреля 2024, 09:30

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 3 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Форум игроделов » Движки для разработки игр и сложные системы разработки » Движки для браузерных игр » Как создать такое игровое поле?
Как создать такое игровое поле?
SektoidДата: Воскресенье, 27 Ноября 2011, 04:00 | Сообщение # 41
почетный гость
Сейчас нет на сайте
Спасибо, еще один вопрос назрел: что лучше юзать для браузерной игры (тоесть не только чата), в которой надо записывать и считывать много разной инфы. Например игроку видно поле 30х30, на нем 400 предметов, у которых есть свои свойства и т.д. Некоторые из них изменяються в рилтайме. Mysql или NoSql типа MongoDB, CouchDB и т.д.??? До этого имел опыт общения только с мускулом))

Сообщение отредактировал Sektoid - Воскресенье, 27 Ноября 2011, 04:01
anton-garДата: Воскресенье, 27 Ноября 2011, 11:30 | Сообщение # 42
WEBmaster
Сейчас нет на сайте
Quote (Sektoid)
Mysql

Добавлено (27.11.2011, 11:30)
---------------------------------------------

Quote (Sektoid)
Mysql


SektoidДата: Воскресенье, 04 Декабря 2011, 06:16 | Сообщение # 43
почетный гость
Сейчас нет на сайте
Спасибо, значит останусь на мускуле. Хотя почитал о монгоДБ - вроде показалось что больше подходит для этого. Там и данные в JSON и скорость говорят выше...
С нодом наконец-то разобрался, все работает cool
Хм, вот отправляю я на запущеный сервер нода user_id чтоб в ответ получить аву, координаты и управление правильным персонажем. Но насколько я знаю javascript можно изменить на клиентской стороне(можно же?). Как проверить что это именно тот пользователь? Есть идея при логине записывать айпи на сам сервак нода в глобальную переменную, которая будет создаваться для каждого клиента, который онлайн, и при каждом запросе обращаться к ней и проверять его. Какие еще есть варианты?


Сообщение отредактировал Sektoid - Воскресенье, 04 Декабря 2011, 06:36
anton-garДата: Воскресенье, 04 Декабря 2011, 10:59 | Сообщение # 44
WEBmaster
Сейчас нет на сайте
Quote (Sektoid)
можно же?


Да.
Айпи у многих пользователей меняется, только если по маку (мак адрес сетевой карты - уникален). Есть масса способов проверки...
Например, при авторизации записывать ид сессии, а далее по нему проверять... Можно при авторизации записать ид в сессию, потом по нему проверять..


SektoidДата: Понедельник, 05 Декабря 2011, 00:45 | Сообщение # 45
почетный гость
Сейчас нет на сайте
Ну вот теперь совсем дурацкий наверно вопрос

Сервер:
Code

client.query(
     ('SELECT id_user, user_sector_x, user_sector_y FROM '+TABLES_USERS+' WHERE online = 1'),
     function(err, results, fields) {
       if (err) {throw err;}

     io.sockets.on('connection', function (socket) {
     socket.emit('infa', results);
});

Клиент:
Code

var socket = io.connect('http://127.0.0.1:8080');
       socket.on('infa', function (data) {
            
         });


Как теперь эту дату перевести в обьекты JS?
Ато в консоли пишет что-то типа "Сокет отправлен: {"name":"infa","args":[[{"id_user":1,"user_sector_x":0,"user_sector_y":0}]]} "
Пробовал var ddd = JSON.parse(data); не работаеь dry


Сообщение отредактировал Sektoid - Понедельник, 05 Декабря 2011, 00:54
AssasinДата: Понедельник, 05 Декабря 2011, 02:08 | Сообщение # 46
web-coder
Сейчас нет на сайте
data.id_user, data.user_sector_x
SektoidДата: Воскресенье, 08 Января 2012, 01:20 | Сообщение # 47
почетный гость
Сейчас нет на сайте
спасибо, проблема решена smile

Добавлено (26.12.2011, 01:08)
---------------------------------------------
и эта тоже решена)

Добавлено (08.01.2012, 01:20)
---------------------------------------------
Так, с серверной частью пока-что все норм - нода при запуске считывает инфу с мускула, работает с ней и при закрытии потом будет отправлять инфу обратно в базу.
Авторизация похожая на это
Quote (anton-gar)
Например, при авторизации записывать ид сессии, а далее по нему проверять...

Потом заморочусь с куками.
Игроки сейчас могут перемещаться по карте, видеть перемещения друг друга и т.д.
Теперь встал вопрос о том, чтоб сделать это все плавно и красиво, с анимацией и эффектами.
Вот тут советовали jquery. Кто знает какие плагины к нему будут полезны при разработке браузерки рилтайм-рпг? Скоро начну его изучать, но намного легче будет если кто-то ткнет носом в самые полезные вещи biggrin
И спасибо всем еще раз, кто помогал - без вас я наверное забил бы на игру, как делают 95% людей, которые решают сделать игру с нулевыми знаниями программирования.


Сообщение отредактировал Sektoid - Воскресенье, 08 Января 2012, 07:28
AssasinДата: Воскресенье, 08 Января 2012, 14:13 | Сообщение # 48
web-coder
Сейчас нет на сайте
Вот смотри, для анимации спрайтов можешь юзать и для плавного перемещения
spritely
SektoidДата: Понедельник, 09 Января 2012, 00:44 | Сообщение # 49
почетный гость
Сейчас нет на сайте
Спасибо, буду изучать))

Хм, я вот думаю как лучше сделать - чтоб игрок всегда был в центре и карта, динамически подгружаясь, двигалась за ним, или чтобы карта была фиксированой и игрок двигался по ней? Но получаеться, что второй вариант требует разбить мир на локации?

И еще - видел во флэше такую фичу - там есть одна анимация персонажа, и когда на него навешиваешь шмотки, то анимация не изменяеться, но шмотки подстраиваються под модель персонажа и двигаються тоже. Такое реально сделать без флеша и если да, то насколько сильно такие штуки грузят клиент? Допустим можно сделать 20 таких анимаций 60х60 пикселей и чтоб это все не тормозило? У меня по этому поводу пока-что есть только одна садо-мазо идея - делать анимацию сначала спрайтов персонажа, потом поверх него еще одну на каждую шмотку, ну кроме тех, что закрывают друг друга wacko и заставить их двигаться синхронно biggrin


Сообщение отредактировал Sektoid - Понедельник, 09 Января 2012, 00:49
AssasinДата: Понедельник, 09 Января 2012, 01:24 | Сообщение # 50
web-coder
Сейчас нет на сайте
Quote (Sektoid)
Хм, я вот думаю как лучше сделать - чтоб игрок всегда был в центре и карта, динамически подгружаясь, двигалась за ним, или чтобы карта была фиксированой и игрок двигался по ней? Но получаеться, что второй вариант требует разбить мир на локации?

Как тебе удобно и какой вариант ты сможешь осилить.
Quote (Sektoid)
И еще - видел во флэше такую фичу - там есть одна анимация персонажа, и когда на него навешиваешь шмотки, то анимация не изменяеться, но шмотки подстраиваються под модель персонажа и двигаються тоже. Такое реально сделать без флеша и если да, то насколько сильно такие штуки грузят клиент? Допустим можно сделать 20 таких анимаций 60х60 пикселей и чтоб это все не тормозило? У меня по этому поводу пока-что есть только одна садо-мазо идея - делать анимацию сначала спрайтов персонажа, потом поверх него еще одну на каждую шмотку, ну кроме тех, что закрывают друг друга wacko и заставить их двигаться синхронно biggrin

Я думаю там рисуются каждое положение шмотки и потом в зависимости от действия воспроизводятся.
SektoidДата: Воскресенье, 15 Января 2012, 20:20 | Сообщение # 51
почетный гость
Сейчас нет на сайте
Нашел много интересных изо движков на javascript\jquery, но большинство либо обфусцированы так, что хрен че поймешь если захочешь изменить, либо не подходят по некоторым критериям, либо слишком грузят систему. Так что ковыряния продолжаються))

Вот кстати маленький кусок кода, который я не могу понять почему рисует тайлы не ровно, а так: ниже\выше\ниже\выше\ниже\выше буквально на 1-2 пикселя. Из-за этого вместо сплошной "воды" образуеться зигзаго-образная вода. Можно, конечно обрезать по 1 пикселю с обеих сторон и оно будет выглядеть более гладко, но все же хочеться узнать что это за глюк)) Может кто поймет в чем дело...
example.html:

Вот так получается:

А и еще если в setup_sprites
написать вместо
Code
x: ((x-y)*25) + 256,
вот так
Code
x: ((x-y)*img.img.height) + 256,
, то тайлы рисуються еще более криво, хотя по сути img.img.height = 25 dry


Сообщение отредактировал Sektoid - Воскресенье, 15 Января 2012, 20:36
AssasinДата: Воскресенье, 15 Января 2012, 21:11 | Сообщение # 52
web-coder
Сейчас нет на сайте
возможно ошибка в том что тайл земли имеет высоту 26 пикселей и он рисуется нормально. А тайл воды 25 пикселей и у него ошибка в 1-2 пикселя
SektoidДата: Воскресенье, 15 Января 2012, 22:39 | Сообщение # 53
почетный гость
Сейчас нет на сайте
Тайлы земли тоже рисуются ненормально, просто у них нету черной границы и поэтому это не заметно сразу - посмотри на скриншот внизу, там где тайлы земли идут в два ряда. Там где они заканчиваются можно увидеть, что они идут не ровно.
Думал это из-за того, что земля больше, чем вода - не помогло. Попробовал сделать поле только из воды, которая 50х25 - та же фигня.

Добавлено (15.01.2012, 22:39)
---------------------------------------------
Точнее помогло, но только частично. Теперь вот эта проблема решена:
Quote (Sektoid)
А и еще если в setup_sprites
написать вместо
Code
x: ((x-y)*25) + 256,

вот так
Code
x: ((x-y)*img.img.height) + 256,

, то тайлы рисуються еще более криво, хотя по сути img.img.height = 25

Но как и раньше они выше\ниже\выше\ниже на 1 пиксель.


Сообщение отредактировал Sektoid - Воскресенье, 15 Января 2012, 22:40
AssasinДата: Воскресенье, 15 Января 2012, 22:55 | Сообщение # 54
web-coder
Сейчас нет на сайте
вот подправил
Code
var sprite = {
                 x: ((x-y)*25) + 256,
                 y: ((x+y)*25/2),
                 w: 50,
                 h: 25,
                 img: img,
             };

только если тайл высотой в 26 пикселей то нормально показывает
SektoidДата: Воскресенье, 15 Января 2012, 23:09 | Сообщение # 55
почетный гость
Сейчас нет на сайте
Я так тоже пробовал, но это обман зрения biggrin За счет того, что 1 пиксель сьедаеться и они перекрывают друг друга + цвет у них одинаковый, так что не сразу можно заметить))
Но опять если посмотреть на границу нижних тайлов, то будет такое:


Сообщение отредактировал Sektoid - Воскресенье, 15 Января 2012, 23:12
AssasinДата: Воскресенье, 15 Января 2012, 23:14 | Сообщение # 56
web-coder
Сейчас нет на сайте
Попробуй отрисовать карту по другому, не ромбом а прямоугольником.
SektoidДата: Понедельник, 16 Января 2012, 00:01 | Сообщение # 57
почетный гость
Сейчас нет на сайте
Эм... так мне же нужна изометрия. Просто не представляю как отрисовать изометрическую карту не ромбом? Ну тоесть понятно, что можно сделать область видимости в форме прямоугольника, но всеравно это будет урезаный ромб. Во всех изо движках встречал только ромб. Ну можно еще гексы использовать, но это еще сложнее.

Добавлено (16.01.2012, 00:01)
---------------------------------------------
Ладно, буду обрезать каждый тайл на 1 пиксель sad Решение не идеальное, но по-другому я пока-что не знаю как сделать sad


Сообщение отредактировал Sektoid - Понедельник, 16 Января 2012, 00:06
AssasinДата: Понедельник, 16 Января 2012, 13:02 | Сообщение # 58
web-coder
Сейчас нет на сайте
Что то мы затупили smile Если в твоем тайле ширина 50 пикселей, то высота должна быть половине ширины. Если исправишь, то все нормально будет.

А вот отрисовка карты как я предлагал
SektoidДата: Понедельник, 16 Января 2012, 16:41 | Сообщение # 59
почетный гость
Сейчас нет на сайте
Хм, ну вот мой water.png:
Code
Тип изображения: png (Формат изображений PNG)
Ширина: 50 пикселов
Высота: 25 пикселов

и в коде такое
Quote (Sektoid)
for (var i = 0; i < tileDict.length; ++i) {
(function (i) {
var img = new Image();
img.onload = function () {
var canvas = document.createElement('canvas');
canvas.width = this.width; // = 50, числом тоже пробовал ставить
canvas.height = this.height; // = 25, числом тоже пробовал ставить
canvas.getContext('2d').drawImage(this, 0, 0);
tileImg[i] = { canvas: canvas, img: img };
};
img.src = tileDict[i];
})(i);
}

и
Quote (Sektoid)
var sprite = {
x: ((x-y)*25) + 256,
y: ((x+y)*25/2),
w: img.img.width, //числом тоже пробовал ставить
h: img.img.height, //числом тоже пробовал ставить
img: img,
};

Но получаеться вот такое.

А с grass.png, у которого на 1 пиксель больше высота, вот так.
И не видно разрезов из-за того, что на 1 пиксель больше чем надо и он их закрывает. Поэтому я в прошлом сообщении писал, что придеться обрезать тайлы на 1 пиксель (либо рисовать их на 1 пиксель большими, чем надо). smile

Quote (Assasin)
А вот отрисовка карты как я предлагал

А как там сектора считаются?
Ну тоесть у меня 0,0 находиться на вершине ромба и Х и У расходяться по сторонам. А там как? Мне впринципе твой вариант больше нравиться, поскольку не надо лишний раз обрезать карту чтоб подогнать её под прямоугольное окно))


Сообщение отредактировал Sektoid - Понедельник, 16 Января 2012, 16:56
AssasinДата: Понедельник, 16 Января 2012, 18:24 | Сообщение # 60
web-coder
Сейчас нет на сайте

1 - 0,0
2 - 0,1
3 - 0,2
31 - 1,0
32 - 1,1
и т.д.
Вот код
Code
function setup_sprites() {
          sprites = [];
    var _tmp = 0;
          for (var x = 0; x < map.length; x++) {
           for (var y = 0; y < map[x].length; y++) {
     var img = tileImg[map[x][y]];
     if(y%2!=0){
       var sprite = {
       x: (x*50)+25,
       y: (y*25)/2,
       w: 50,
       h: 25,
       img: img,
      };
     } else {
       var sprite = {
       x: (x*50),
       y: (y*25)/2,
       w: 50,
       h: 25,
       img: img,
      };
     }
              sprites.push(sprite);
     _tmp++;
          }
    }

          draw_frame();
}

Quote (Sektoid)
Хм, ну вот мой water.png:
Тип изображения: png (Формат изображений PNG)
Ширина: 50 пикселов
Высота: 25 пикселов

Нет, нет. Не параметры картинки должны такими быть, а сам тайл должен быть нарисован с высотой 25 и шириной 50. Возможно он где то на 1 пиксель кривой, поэтому получается смещение.
Форум игроделов » Движки для разработки игр и сложные системы разработки » Движки для браузерных игр » Как создать такое игровое поле?
  • Страница 3 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг