Среда, 13 Ноября 2024, 14:48

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Результаты поиска
dima13230Дата: Четверг, 24 Марта 2016, 01:23 | Сообщение # 21 | Тема: XNA 2D Occlusion Culling
частый гость
Сейчас нет на сайте
Заодно и сам вызов отображения тайла кинул на всякий случай smile
dima13230Дата: Четверг, 24 Марта 2016, 01:22 | Сообщение # 22 | Тема: XNA 2D Occlusion Culling
частый гость
Сейчас нет на сайте
Код

for (int x = ((int)cam.Pos.X / 15) - graphics.GraphicsDevice.Viewport.Width / 15 / 2; x < (cam.Pos.X / 15) + graphics.GraphicsDevice.Viewport.Width / 15 / 2; x++)
            {
                for (int y = ((int)cam.Pos.Y / 15) - graphics.GraphicsDevice.Viewport.Height / 15 / 2; y < (cam.Pos.Y / 15) + graphics.GraphicsDevice.Viewport.Height / 15 / 2; y++)
                {
                    if (tiles[x, y] != null)
                    {
                        if (x < 0 || x >= ViewTilesWidth) continue;
                        if (y < 0 || x >= ViewTilesHeight) continue;
                        int id = (int)tiles[x, y].type;

                        DrawFrameTile(id, x, y, 0, 0);

                    }
                }
            }
dima13230Дата: Четверг, 24 Марта 2016, 01:19 | Сообщение # 23 | Тема: XNA 2D Occlusion Culling
частый гость
Сейчас нет на сайте
Цитата Lertmind ()
что-то типа фонарика в темноте


Возможно и это спрошу потом :-)

Добавлено (24 марта 2016, 01:18)
---------------------------------------------
Цитата FlyOfFly ()
Спасибо! Только радиус увеличу, а то отображается лишь малая часть тайлов :-)

Тогда используй, половины ширины и высоты камеры(делю сначала на TileSize, что бы получить количество возможных тайлов на экране, а половина, так камера у тебя вроде бы по середине)
Код

for(int i = (camera._pos.x/TileSize)-Camera_Width/TileSize/2;i<(camera._pos.x/TileSize)+Camera_Width/TileSize/2;i++){
for(int j = (camera._pos.y/TileSize)-Camera_Height/TileSize/2;j<(camera._pos.y/TileSize)+Camera_Height/TileSize/2;j++){
if(i<0 || i>=MapWidth) continue;
if(j<0 || j>=MapHeight) continue;
//вывод тайла, который на i,j
}
}

или экрана
Код

for(int i = (camera._pos.x/TileSize)-Screen_Width/TileSize/2;i<(camera._pos.x/TileSize)+Screen_Width/TileSize/2;i++){
for(int j = (camera._pos.y/TileSize)-Screen_Height/TileSize/2;j<(camera._pos.y/TileSize)+Screen_Height/TileSize/2;j++){
if(i<0 || i>=MapWidth) continue;
if(j<0 || j>=MapHeight) continue;
//вывод тайла, который на i,j
}
}


Пишет что индекс выходит за пределы массива

Добавлено (24 марта 2016, 01:19)
---------------------------------------------
FlyOfFly, может я дам код отображения? Он чуть отличается от того, что ты давал. ( правда суть та же )


Сообщение отредактировал dima13230 - Четверг, 24 Марта 2016, 01:20
dima13230Дата: Четверг, 24 Марта 2016, 01:07 | Сообщение # 24 | Тема: XNA 2D Occlusion Culling
частый гость
Сейчас нет на сайте
Спасибо! Только радиус увеличу, а то отображается лишь малая часть тайлов :-)

Добавлено (24 марта 2016, 01:07)
---------------------------------------------

Цитата Lertmind ()
Ты не объяснил как именно у тебя выглядит камера, я нарисовал пример:

Синяя - камера, и тебе надо узнать какие клетки отобразить (с галочкой) и не отображать (с крестиком)?


Камера квадратная. Отображает вид сбоку.
dima13230Дата: Четверг, 24 Марта 2016, 00:56 | Сообщение # 25 | Тема: XNA 2D Occlusion Culling
частый гость
Сейчас нет на сайте
Цитата FlyOfFly ()

Цитата dima13230 ()

А набор тайлов представляет из себя двумерный массив с координатами x и y. Я думаю, что можно вычислить площадь видимой зоны окна и сравнивать с координатами. Но что точно нужно сделать?

В таком случае, надо просто не выводить весь массив стразу, а выводить только в радиусе определенном
вот допустим типа такого
Код

for(int i = (camera._pos.x/TileSize)-5;i<(camera._pos.x/TileSize)+5;i++){
for(int j = (camera._pos.y/TileSize)-5;j<(camera._pos.y/TileSize)+5;j++){
if(i<0 && i>=MapWidth) continue;
if(j<0 && j>=MapHeight) continue;
//вывод тайла
}
}....


Не, не работает, выдаёт исключение OutOfMemory ( наверное вечный цикл... )
dima13230Дата: Четверг, 24 Марта 2016, 00:33 | Сообщение # 26 | Тема: XNA 2D Occlusion Culling
частый гость
Сейчас нет на сайте
Не получается сделать так, чтобы если камера не видит тайл, он не отображался. Всё это происходит в 2D среде.
Вот скрипт камеры:
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Terraria.Input;
using Microsoft.Xna.Framework.Input;

namespace 2DBlocks
{
    public class Camera
    {
        protected float _zoom; // Camera Zoom
        public Matrix _transform; // Matrix Transform
        public Vector2 _pos; // Camera Position
        protected float _rotation; // Camera Rotation
        public Game1 game;

        public Camera(Game1 Game)
        {
            _zoom = 1.0f;
            _rotation = 0.0f;
            _pos = Vector2.Zero;
            game = Game;
        }

        // Sets and gets zoom
        public float Zoom
        {
            get { return _zoom; }
            set { _zoom = value; if (_zoom < 0.1f) _zoom = 0.1f; } // Negative zoom will flip image
        }

        public float Rotation
        {
            get { return _rotation; }
            set { _rotation = value; }
        }

        // Auxiliary function to move the camera
        public void Move(Vector2 amount)
        {
            _pos += amount;
        }
        // Get set position
        public Vector2 Pos
        {
            get { return _pos; }
            set { _pos = value; }
        }

        public Matrix get_transformation(GraphicsDevice graphicsDevice)
        {
            _transform =       // Thanks to o KB o for this solution
              Matrix.CreateTranslation(new Vector3(-_pos.X, -_pos.Y, 0)) *
                    Matrix.CreateRotationZ(Rotation) *
                    Matrix.CreateScale(new Vector3(Zoom, Zoom, 1)) *
                    Matrix.CreateTranslation(new Vector3(game.GraphicsDevice.Viewport.Width * 0.5f, game.GraphicsDevice.Viewport.Height * 0.5f, 0));
            return _transform;
        }

    }
}


А набор тайлов представляет из себя двумерный массив с координатами x и y. Я думаю, что можно вычислить площадь видимой зоны окна и сравнивать с координатами. Но что точно нужно сделать?


Сообщение отредактировал dima13230 - Четверг, 24 Марта 2016, 00:36
dima13230Дата: Понедельник, 27 Апреля 2015, 22:24 | Сообщение # 27 | Тема: Инструкция:как компилировать движок HPL1
частый гость
Сейчас нет на сайте
Я в своей первой теме научу вас компилировать движок HPL1,что является довольно большой проблемой,так как движок хороший,но некомпилируемый. Скажу честно: я умертвил немало своих нервных клеток перед тем,как я всё таки скомпилировал его. biggrin Я использую Visual Studio 2008,поэтому не гарантирую что данный способ сработает на других версиях.Итак,приступим:
1.Скачать библиотеки и сам движок ОБЯЗАТЕЛЬНО по этим адресам:
Библиотеки: http://www.moddb.com/engines....release
Движок: http://www.moddb.com/engines/hpl/downloads/hpl1-engine-initial-release
Учтите,что библиотеки libogg и libvorbis необходимо скачать самостоятельно! Иначе будет ошибка! ( эти библиотеки есть в архиве,но их версия слишком старая )
Помимо тех библиотек надо самостоятельно скачать и установить angelscript,SDL,Newton Dynamics.
2.Далее устанавливаем библиотеки и открываем студию...
3.Компилируем проект и вуаля! ( однако может выскочить ошибка с неизвестным идентификатором AL_EFFECT_EAXREVERB. Всё что нужно сделать,это удалить приставку EAX. Но есть один минус - это повлияет на звук,но не бойтесь,не критически,просто будет меньше возможностей "ревербератора". )
Прошу строго не судить,так как я уже говорил это моя первая тема. smile


Сообщение отредактировал dima13230 - Вторник, 28 Апреля 2015, 19:06
dima13230Дата: Пятница, 24 Апреля 2015, 19:01 | Сообщение # 28 | Тема: Компиляция движка HPL
частый гость
Сейчас нет на сайте
Цитата ezhickovich ()
try removing the glee source and header file from the dependencies folder.

До словно:
Попробуй удалить сорец и хедер глии из папки с зависимостями проекта...

Мне не помогло cry
Лог:
http://rghost.ru/6CFsGplSP

Компилирую на Visual Studio 2008

Добавлено (24 апреля 2015, 18:47)
---------------------------------------------
Так,скомпилировать мне удалось,а что мне делать с полученными obj файлами? smile

Добавлено (24 апреля 2015, 19:01)
---------------------------------------------
Вот английские документация и туториалы от разработчиков: https://wiki.frictionalgames.com/hpl1/start

Сообщение отредактировал dima13230 - Пятница, 24 Апреля 2015, 13:55
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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