Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> xna, длинный спрайт, как? 
:(
    Опции темы
DooZ
Дата 13.12.2009, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



Здравствуйте,

есть такой вопрос
пытаюсь загрузить длинный спрайт (100 кадров), размер каждого кадра 128х128 получается 12800х128 размер png файла
xna отказывается работать, выдает предупреждение:

Texture is too big to work on all graphics cards. This image is sized 12800x128, but many cards do not support sizes larger than 2048.

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

что делать? как быть?
как вообще загружать (работать) с такими спрайтами где очень много кадров?

заранее благодарю.
PM MAIL   Вверх
Miller_time
Дата 16.12.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 641
Регистрация: 8.9.2006
Где: Нижний Новгород

Репутация: нет
Всего: 1



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

Добавлено через 1 минуту и 15 секунд
Код

приведен код класса Game1, реализующий функциональность по скроллингу фона.
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace P6_3
{
    
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        //объекты для создания скроллингового фона
        sprite road1;
        sprite road2;
        //скорость скроллинга
        Vector2 scrolSpeed;
        //позиции, на которые устанавливаются обе "дороги"
        //в момент начала игры и каждый раз, когда они
        //сдвинутся на определенное расстояние
        Vector2 road1Start;
        Vector2 road2Start;

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }

        
        protected override void Initialize()
        {
            //скорость скроллинга - 5 пикселей по оси Y за один
            //проход цикла Update
            scrolSpeed = new Vector2(0, 5f);
            //первая "дорога" будет изначально установлена в позиции 0,0
            //вторая дорога - за пределами игрового экрана - в позиции 0,-600
            road1Start = new Vector2(0, 0);
            road2Start = new Vector2(0, -600);
            base.Initialize();
        }

        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            //создаем игровые объекты
            road1  = new sprite(Content.Load<Texture2D>("road"), road1Start );
            road2 = new sprite(Content.Load<Texture2D>("road"), road2Start );


        }

        
        protected override void UnloadContent()
        {
            road1.spTexture.Dispose();
            road2.spTexture.Dispose();
            spriteBatch.Dispose();

        }

        protected override void Update(GameTime gameTime)
        {

            //если первая "дорога" не спустилась ниже, чем координата 0,600
            //то есть все еще видна на экране
            //тогда переместить обе "дороги" на дистанцию, задаваемую
            //в scrolSpeed
            if (road1.spPosition.Y < 600)
            {
                road1.spPosition += scrolSpeed;
                road2.spPosition += scrolSpeed;
            }
            else
            {
                //если первая дорога ушла за пределы видимости
                //это означает что вторая полностью выведена на экран
                //вычислим новую позицию для установки объектов
                //для того, чтобы не было скачков при установке 
                //предварительно вычислим новую позицию
                road1Start.Y = road1.spPosition.Y - 600;
                road2Start.Y = road2.spPosition.Y - 600;
                road1.spPosition = road1Start;
                road2.spPosition = road2Start;
            }

            base.Update(gameTime);
        }

        protected override void Draw(GameTime gameTime)
        {
            graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

            spriteBatch.Begin();
            //выведем первый и второй спрайт на экран
            spriteBatch.Draw(road1.spTexture, road1.spPosition, Color.White);
            spriteBatch.Draw(road2.spTexture, road2.spPosition, Color.White);
            spriteBatch.End();
            // TODO: Add your drawing code here

            base.Draw(gameTime);
        }
    }
}



--------------------
Мы делаем игрыЗДЕСЬ
PM MAIL WWW ICQ   Вверх
Rickert
Дата 17.12.2009, 03:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



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


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Rpahut
Дата 24.12.2009, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: 5
Всего: 7



Вместо одной строки кадры можно расположить в несколько строк. Коодинаты кадра легко находятся по его порядковому номеру.
100х128х128 вполне поместится в текстуру размером 2048х2048.

Некоторые видеокарты хавают текстуры неправильных размеров, но работают с ними не очень хорошо. В любом случае следует использовать текстуры квадратные с размерами степени двойки.
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
DooZ
Дата 13.1.2010, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



сорри что давно не отвечал, вообще как и говорили работаю с квадратным спрайтом 10х10 кадоров (100 кадров)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0632 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.