forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   Вопросы по XNA. (http://forum.boolean.name/showthread.php?t=16854)

Dream 03.12.2012 04:57

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от wppt (Сообщение 245500)
Что то программа зависает :(?

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

wppt 03.12.2012 16:18

Ответ: Вопросы по XNA.
 
Больше не зависает, ну а что же в сетдата писать?

Не знаю, у меня вообще бред получается:

Код:

//lload content           
            TextData = new Color[800 * 600];
            maprender.GetData<Color>(TextData);

//сам метод
        void fill(int x, int y, Color newC, Color oldC,RenderTarget2D rend)
        {
            Color[] colors = new Color[1];
            rend.GetData(0, new Rectangle(x, y, 1, 1), colors, 0, 1);
            if (x >= 0 && y >= 0 && x < rend.Width && y < rend.Height && colors[0] == oldC && colors[0] != newC)
            {
                TextData[y * rend.Width + x] = colors[0];
                rend.SetData<Color>(TextData);
                fill(x - 1, y, newC, oldC, rend);
                fill(x + 1, y, newC, oldC, rend);
                fill(x, y - 1, newC, oldC, rend);
                fill(x, y + 1, newC, oldC, rend);
            }
            else return;
        }

при нажатии кнопки мыши должен вызываться метод. Но экран окрашивается в cornflowerblue и все :(

Dream 03.12.2012 18:38

Ответ: Вопросы по XNA.
 
без всего проекта ничем не могу помочь

wppt 03.12.2012 20:26

Ответ: Вопросы по XNA.
 
ну а так-то я ничего не перепутал? Все условия верно записаны?

Dream 03.12.2012 20:40

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от wppt (Сообщение 245661)
ну а так-то я ничего не перепутал? Все условия верно записаны?

да вроде правильно, кроме развечто лишнего
PHP код:

colors[0] != newC 


wppt 03.12.2012 22:13

Ответ: Вопросы по XNA.
 
а может дело в том, что метод запускается именно по нажатию кнопки мыши? Я пробовал зажать и поводи по экрану - рисует нужным цветом

А вот в load случайно с самого начала rendertarget разве не полностью пуст? - Проверил, так и есть! Что же делать?

Dream 06.12.2012 04:25

Ответ: Вопросы по XNA.
 
Повторюсь, без полного кода ничем не смогу помочь. А телепатически- ты рисуешь текстуру только когда мышка зажата.

wppt 06.12.2012 17:49

Ответ: Вопросы по XNA.
 
вот ты ухватился за этот код! Сейчас будет все :)


Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Media;
using System.IO;
using System.Threading.Tasks;
using System.Threading;

namespace WindowsGame4
{
    public class mygam : Microsoft.Xna.Framework.Game
    {
        int overload;
        float camscale = 1.5f;
        RenderTarget2D mapr;
        GraphicsDevice graphdev;
        GraphicsDeviceManager myGraphics;
        GraphicsProfile graphprof;
        KeyboardState myKeyboardState;
        MouseState mymouse;
        ContentManager Content;
       
        SpriteBatch batch1;
        SpriteBatch batch2;
       
        static SpriteFont main;
        Random rand;

        TimeSpan eltime = TimeSpan.Zero;
       
        Color[] dat;
        Color[] mapTextData;
       
        Drawing Map;
       
        Camera cam;

        Matrix Camp;
        Rectangle mapRect;
        Vector2 vel;
       
        int FPC = 0;
        int FPS = 0;
       
        World world = new World();
       
        public mygam()
        {

            Window.Title = "myGam";
            Window.AllowUserResizing = true;
           
            myGraphics = new GraphicsDeviceManager(this);
            myGraphics.PreferMultiSampling = true;
            myGraphics.SynchronizeWithVerticalRetrace = false;
            myGraphics.PreferredBackBufferWidth = 800;
            myGraphics.PreferredBackBufferHeight = 600;
       
            Content  = new ContentManager(Services);
            graphprof = new GraphicsProfile();
            rand = new Random();
            cam = new Camera(new Vector2(0,0));
            dat = new Color[1] { new Color(0,0,0,0)};
           
            Map = new Drawing(10, 10, false, new Vector2(0, 0));
       
        }

        protected override void Initialize()
        {
            base.Initialize();
            world.Init();
        }
 
        protected override void LoadContent()
        {
            var parameters = myGraphics.GraphicsDevice.PresentationParameters;

            graphdev = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, graphprof, parameters);

            mapr = new RenderTarget2D(GraphicsDevice, 800, 600, false, SurfaceFormat.Color, DepthFormat.Depth24);

            Content.RootDirectory = "Content";

            batch1 = new SpriteBatch(GraphicsDevice);
            batch2 = new SpriteBatch(GraphicsDevice);

            Map.loading(Content, @"NewFolder1\map");

            mainf = Content.Load<SpriteFont>("mainf");

            mapTextData = new Color[800 * 600];
            mapr.GetData<Color>(mapTextData);
        }

        protected override void UnloadContent()
        {
        }
     
        protected override void Update(GameTime gameTime)
        {
            Camp = cam.Targeted(cam.position, vel,0,camscale);

            eltime += gameTime.ElapsedGameTime;

            if (eltime > TimeSpan.FromSeconds(1))
            {
                eltime -= TimeSpan.FromSeconds(1);
                FPS = FPC;
                FPC = 0;
            }

            world.UpdateWorld();
            base.Update(gameTime);
        }

        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.SetRenderTarget(mapr);
            world.UpdateWorld();
            FPC++;

            string FPSS = string.Format("fps: {0}", FPS);
           
            batch1.Begin(SpriteSortMode.Deferred,BlendState.AlphaBlend,null,null,null,null,Camp);
                       
            Map.draw(batch1);

            batch1.End();

            GraphicsDevice.SetRenderTarget(null);
            GraphicsDevice.Clear(Color.CornflowerBlue);
           
            batch2.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);

                batch2.Draw(mapr, Vector2.Zero, Color.White);

                if (mymouse.LeftButton == ButtonState.Pressed && overload == 0)
                {
                    try
                    {
                        mapr.GetData<Color>(0, new Rectangle(mymouse.X, mymouse.Y, 1, 1), dat, 0, 1);
                        overload = 60;
                    }
                    catch
                    { }
                }

                if (mymouse.RightButton == ButtonState.Pressed)
                {
                  fill(mymouse.X, mymouse.Y, new Color(254, 230, 158, 255), dat[0], mapr);
                }

                Color a = dat[0];
                string aa = string.Format("{0}", a);
                batch2.DrawString(mainf, aa, new Vector2(33, 400), Color.Black);

                if (overload > 0)
                    overload--;
            }

            batch2.End();
 
            base.Draw(gameTime);
        }

        fill(int x, int y, Color newC, Color oldC,RenderTarget2D rend)
        {
            Color[] colors = new Color[1];
            rend.GetData(0, new Rectangle(x, y, 1, 1), colors, 0, 1);
            if (x >= 0 && y >= 0 && x < rend.Width && y < rend.Height && colors[0] == oldC && colors[0] != newC)
            {
                colors [0] = newC;
                mapTextData[y * rend.Width + x] = colors[0];
                rend.SetData<Color>(mapTextData);
                fill(x - 1, y, newC, oldC, rend);
                fill(x + 1, y, newC, oldC, rend);
                fill(x, y - 1, newC, oldC, rend);
                fill(x, y + 1, newC, oldC, rend);
            }
            else return;
        }
    }
}


Dream 06.12.2012 19:02

Ответ: Вопросы по XNA.
 
Что это за код то? лишняя закрывающая скобка в Draw.
Не нужно создавать два SpritBatch, используй один.
В коде вообще каша какаето, ты наспех чтото удалял и переносил видимо, потому что имена переменных несовпадают даже в одном методе, mpr -morender, Rock_TextData,

PHP код:

if (>= && >= && rend.Width && rend.Height && [b]colors[0] == oldC && colors[0] != newC[/b]) 


Ну и вообще логикадолжна быть вся в Update а не в драве.

Цитата:

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

wppt 06.12.2012 20:20

Ответ: Вопросы по XNA.
 
Да, что-то я поторопился! Надеюсь, теперь все исправлено.

Ну так что же у меня не так?

Dream 06.12.2012 21:05

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от wppt (Сообщение 245963)
Да, что-то я поторопился! Надеюсь, теперь все исправлено.

Ну так что же у меня не так?

Ну скинь исправленный код. я ведь не в курсе что ты атм исправил и как оно теперь выглядит.

wppt 07.12.2012 17:04

Ответ: Вопросы по XNA.
 
код выше уже исправлен :)

Но все равно не работает так, как надо

Dream 07.12.2012 18:19

Ответ: Вопросы по XNA.
 
где присваивание mymouse значения?
В общем, можешь скинуть весь проект, вечером погляжу что не так, нет - так нет, мне лень наугад направлять тебя.

wppt 07.12.2012 19:57

Ответ: Вопросы по XNA.
 
сейчас, только все лишнее поудаляю

http://rghost.ru/42073190

вот

Dream 07.12.2012 21:09

Ответ: Вопросы по XNA.
 
Тю блин, ты каждый раз перетираешь все изменения в рендер таргете.

wppt 07.12.2012 22:06

Ответ: Вопросы по XNA.
 
неужели? А как тогда надо?

Dream 07.12.2012 22:10

Ответ: Вопросы по XNA.
 
PHP код:

protected override void LoadContent()
        {
            var 
parameters myGraphics.GraphicsDevice.PresentationParameters;

            
graphdev = new GraphicsDevice(GraphicsAdapter.DefaultAdaptergraphprofparameters);

            
mapr = new RenderTarget2D(GraphicsDevice800600falseSurfaceFormat.ColorDepthFormat.Depth24);

            
Content.RootDirectory "Content";

            
batch1 = new SpriteBatch(GraphicsDevice);
            
batch2 = new SpriteBatch(GraphicsDevice);

            
Map.load(Content, @"asd");

            
mainf Content.Load<SpriteFont>("MAINFN");

            
mapTextData = new Color[800 600];

            
GraphicsDevice.Clear(Color.CornflowerBlue);
            
GraphicsDevice.SetRenderTarget(mapr);

            
batch1.Begin(SpriteSortMode.DeferredBlendState.AlphaBlend);

            
Map.draw(batch1);

            
batch1.End();

            
GraphicsDevice.SetRenderTarget(null);
            
mapr.GetData<Color>(mapTextData);


        } 

PHP код:

protected override void Draw(GameTime gameTime)
        {



            
batch2.Begin(SpriteSortMode.DeferredBlendState.AlphaBlendnullnullnullnull);

            
batch2.Draw(maprVector2.ZeroColor.White);

            
Color a dat[0];
            
string aa string.Format("{0}"a);
            
batch2.DrawString(mainfaa, new Vector2(33400), Color.Black);



            
batch2.End();

            
base.Draw(gameTime);
        } 


wppt 07.12.2012 22:57

Ответ: Вопросы по XNA.
 
я не понял, а как же заливать тогда?
И почему устанавливать рендертаргет, очищать экран, и рисовать батч нужно именно в loadContent? Ах да, программа виснет и бросает stackoverflow.

Dream 08.12.2012 04:29

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от wppt (Сообщение 246047)
я не понял, а как же заливать тогда?
И почему устанавливать рендертаргет, очищать экран, и рисовать батч нужно именно в loadContent? Ах да, программа виснет и бросает stackoverflow.

Я здаюсь. Помучайся с кодом пару дней, может сам найдёшь решение, что будет лучшим исзодом.

wppt 08.12.2012 14:54

слабак :)

попробую что-нибудь поменять

а почему программа занимает 20% цп даже если метод уже не вызывается?

pax 08.12.2012 19:23

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от wppt (Сообщение 246070)
слабак :)

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

wppt 08.12.2012 20:39

Ответ: Вопросы по XNA.
 
окей, однако ж его никто не заставлял это делать :)

Взялся помочь, не довел дело до конца, какие еще тут могут быть выводы?

pax 08.12.2012 21:12

Ответ: Вопросы по XNA.
 
Личные оскорбления в личку. Они запрещены правилами форума.

wppt 16.12.2012 19:42

Подскажите, как максимально уменьшить выделяемую игре(игрой?) память?
У меня всего несколько спрайтов, а игра уже занимает ~38 мб озу!

Да и почему загрузка цп всегда на уровне 25%?

еще вопрос, который меня всегда интересовал: как программировать физику в игре? Я сейчас не имею ввиду модели поведения упругих/вязких/деформируемых сред - это, понятное дело, непросто. Но ведь можно же хотя бы, реализовать движение по неровной местности в 2д игре? В интернете видел только с баундинг боксами - не то, что нужно. Видел просто попиксельную проверку столкновения - но ведь это не физика наверно. Есть ли сэмпл кода именно с простенькой физикой (прыжками, хождением по неровной местности, скольжением и т.п.)
Мои собственные попытки ни к чему не привели :(

pax 23.12.2012 00:27

Ответ: Вопросы по XNA.
 
http://farseerphysics.codeplex.com/

В дополнение:
http://bepuphysics.codeplex.com/
http://jiglibx.codeplex.com/

wppt 23.12.2012 00:46

Ответ: Вопросы по XNA.
 
интересно, а сам пользовался? Интересно также, кто-нибудь пробовал свой физ. движок написать?

pax 23.12.2012 01:08

Ответ: Вопросы по XNA.
 
Физдвижки не писал, фарсир это порт box2d на шарп, лучший какой я знаю порт. Там есть пример с машинкой, едущей по 2d ландшафту.

wppt 23.12.2012 12:30

Ответ: Вопросы по XNA.
 
где же этот пример? Из примеров для новичков я нашел только пример с платформой и шариком. Но оттуда многого не почерпнуть :(

pax 23.12.2012 13:10

Ответ: Вопросы по XNA.
 
Скачиваешь Farseer Physics Engine 3.3.1 Samples XNA со страницы Downloads Там ищешь GameDemo1

wppt 24.12.2012 17:33

Ответ: Вопросы по XNA.
 
мда, вещь конечно, хотел бы и я так сделать!
Вот есть же люди, которые это придумывают, знают, как это работает и как должно работать... мне наверно никогда таким не стать :(

pax 24.12.2012 18:06

Ответ: Вопросы по XNA.
 
Зачем самому делать? Бери и пользуйся ;)

wppt 09.01.2013 19:51

Ответ: Вопросы по XNA.
 
еще вопросы появились - при компиляции игры все ее ресурсы расположены в отдельной папке, т.е. не в exe. Но ведь так любой может просто взять что-то да и своровать, загрузить в свой проект. Как вынести ресурсы в спец. файлы, и загружать при необходимости?

pax 09.01.2013 20:49

Ответ: Вопросы по XNA.
 
Возьми какой-то архив с паролем например... найди библиотеку, работающую с этим архивом и читай когда надо. Можешь что-то свое придумать.

wppt 11.01.2013 13:27

Ответ: Вопросы по XNA.
 
ну возми там какую-нибудь игру - саундтрек или картинки какие из нее просто так не выудишь - все это хранится в спец. файлах, которые "распаковываются" уже на этапах работы программы - вовремя загрузки, к примеру

pax 11.01.2013 13:45

Ответ: Вопросы по XNA.
 
Ну вот "спец архив" будет у тебя, из которого ты сможешь распаковывать когда захочешь. Назови его data.pak и все)

wppt 11.01.2013 15:18

Ответ: Вопросы по XNA.
 
Вот еще кое-что - как дела обстоят с декомпиляцией игр? У меня например, программа есть, она декомпилирует код в команды вирт. машины и преобразует их в обычный С#. Смотри, чего пожелаешь. Есть ли возможность усложнить декомпиляцию?

pax 11.01.2013 15:20

Ответ: Вопросы по XNA.
 
Смотри в сторону обфускаторов.

wppt 12.01.2013 13:45

Ответ: Вопросы по XNA.
 
а ты сам каким-нибудь пользуешься? Какой мог бы посоветовать?

pax 12.01.2013 13:50

Ответ: Вопросы по XNA.
 
Для Unity я пользуюсь платным, для С# пользовался Eazfuscator'ом, но он недавно стал платным. Чаще пользуюсь бесплатными фичами встроенного в студию Dotfuscator'а

wppt 13.01.2013 13:04

что-то не видел там встроенного обфуксатора.

Вот еще вопрос - почему так падает производительность при использовании SpriteBatch.Draw(...)?

Мне нужно отрисовать множество мелких частей одной текстуры, в соответствии с содержанием "карты". Вот, что я делаю

Код:

for (int i = 0; i < fld.scope.Length; i++)
    spriteBatch.Draw(texture, new Rectangle((i % a.w) * b.w + 85,(i / a.h) * b.h + 200, b.w, b.h), new Rectangle(8 * a.scp[i], 0, b.w, b.h), Color.White);

Всего получается около 1280 элементов, но их будет больше!

Раньше как-то об этом не задумывался:

1. Можно ли поместить ресурсы в exe? Как тогда их загружать и пользоваться ими?
2. Как сделать так, чтобы по нажатию клавиши, действие выполнилось 1 раз, даже если она все еще нажата, и больше не выполнялось до следующего нажатия?

а и еще - как подключить dll без создания ссылки в студии?

pax 01.02.2013 10:30

Ответ: Вопросы по XNA.
 
1. http://msdn.microsoft.com/ru-ru/libr...(v=vs.90).aspx
2. Лови момент изменения с "не нажата" на "нажата" (т.е. храни предыдущее состояние кнопки).

по dll - можно по форме плагинов. Загрузить сборку в текущий домен приложения. Найти в ней типы, которые надо подключить (в плагинах нужные типы реализуют какой-то интерфейс). Создать экземпляр заданного типа с помощью класса Activator ну и т.д.

moka 01.02.2013 14:48

Ответ: Вопросы по XNA.
 
wppt, используй кнопку "Правка" в нижнем правом углу под своими сообщениями, если ещё никто не ответил. Чтобы не плодить подряд посты.
Объединяй их в одно.

wppt 01.02.2013 16:50

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от pax (Сообщение 251331)
1. http://msdn.microsoft.com/ru-ru/libr...(v=vs.90).aspx
2. Лови момент изменения с "не нажата" на "нажата" (т.е. храни предыдущее состояние кнопки).

по dll - можно по форме плагинов. Загрузить сборку в текущий домен приложения. Найти в ней типы, которые надо подключить (в плагинах нужные типы реализуют какой-то интерфейс). Создать экземпляр заданного типа с помощью класса Activator ну и т.д.

Спасибо за ответ, по поводу ресурсов: а как потом, выводить спрайт? Средствами xna? Texture это ж вроде тип xna, как его привести к загруженному изображению, например? Или я все усложняю? Я просто этим не занимался, не рублю...
А вот что насчет шрифтов(не spritefont)? Видел пример с загрузкой шрифта, но там используются типы rectangle и color - это абсолютно одно и то же, что в xna? Или придется еще подумать над этим?

Dream 01.02.2013 18:07

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от wppt (Сообщение 251351)
Спасибо за ответ, по поводу ресурсов: а как потом, выводить спрайт? Средствами xna? Texture это ж вроде тип xna, как его привести к загруженному изображению, например? Или я все усложняю? Я просто этим не занимался, не рублю...
А вот что насчет шрифтов(не spritefont)? Видел пример с загрузкой шрифта, но там используются типы rectangle и color - это абсолютно одно и то же, что в xna? Или придется еще подумать над этим?

Texture2D.LoadFromStream или как то так есть метод, который грузит тектуру из любого Stream. Насчёт шрифтов - есть Pipelinы для загрузки шрифтов из текстур, то их нужно будет дерать в Content менеджере.

wppt 02.02.2013 13:18

Ответ: Вопросы по XNA.
 
спасибо, как раз таки нашел примерчик... вроде все очень просто!

ІГРОГРАЙКО 21.02.2013 22:31

Ответ: Вопросы по XNA.
 
Народ!
Пожалуйста! Посоветуйте мне литературу, статьи, туториалы по созданию 2D игор типа "AngryBirds" на XNA!

pax 22.02.2013 01:51

Ответ: Вопросы по XNA.
 
Как тот так http://farseerphysics.codeplex.com/

wppt 22.02.2013 20:40

Ответ: Вопросы по XNA.
 
Нужна помощь!
Пытаюсь загрузить спрайт из ресурсов...

Код:

Texture2D.FromStream(graphicsD, Assembly.GetCallingAssembly().GetManifestResourceStream("WindowsGame1.Resources.sprite.png"));
Но что-то идет не так и спрайт не выводится... при выходе из программы пишет, что
"Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."
Как справиться?


Так же недавно узнал про такую штуку - dynamic типы...
Как понимаю, память для них выделяется во время выполнения? А если использовать одну переменную для совершенно разных целей (например сначала как строку, а потом, чего уж, как текстуру?)? Экономия будет? Как с производительностью?

Dream 23.02.2013 15:15

Ответ: Вопросы по XNA.
 
По поводу ошибки, попробуй получит в переменную стрим, может он равен нулю, возможно формат фала не подходит.
По поповоду динамик типов, не уверен что такое вобще возможно. А выиграша уж точно не будет

wppt 23.02.2013 15:32

Ответ: Вопросы по XNA.
 
нет, стрим не null, проверил... неужели png не подходит?

стрим null только если помечать спрайт не как embeded resource... или если файл не найден... тогда бросает исключение

wppt 23.02.2013 15:42

Ответ: Вопросы по XNA.
 
кстати нашел еще код - результат его выполнения тот же:
Код:

        public static void imagetotexture(GraphicsDevice device, ref Texture2D texture, System.Drawing.Image image)
        {
            if (image == null)
                return;

            if (texture == null || texture.IsDisposed || texture.Width != image.Width || texture.Height !=
                image.Height || texture.Format != SurfaceFormat.Color)
            {
                if (texture != null && !texture.IsDisposed)
                    texture.Dispose();
                texture = new Texture2D(device, image.Width, image.Height, false, SurfaceFormat.Color);
            }
            else
            {
                for (int i = 0; i < 16; i++)
                    if (device.Textures[i] == texture)
                    {
                        device.Textures[i] = null;
                        break;
                    }
            }

            using (MemoryStream mstream = new MemoryStream())
            {
                image.Save(mstream, System.Drawing.Imaging.ImageFormat.Png);
                mstream.Seek(0, SeekOrigin.Begin);
                texture = Texture2D.FromStream(device, mstream, image.Width, image.Height, false);
            }
        }


wppt 05.03.2013 17:13

Ответ: Вопросы по XNA.
 
Здравствуйте, нужна помощь. Тема не относится именно к хна, просто тут я надеюсь скорее получить ответ.
Верно ли следующее уравнение точки p(см. рисунок) при любом положении прямой l и угле alpha?

p.y>(a.x/a.y)*p.x+a.x;
p.y<(a.x/a.y)*p.x+a.x+|L|*sec(arccos(v*L/(|v|*|L|)))

и зависит ли оно от выбора точки a как начала или конца отрезка l?


естественно, начало координат - верхний левый угол

pax 05.03.2013 17:24

Ответ: Вопросы по XNA.
 
p.y = 1
p.x = 1
a.x = 10
a.y = 1

1 > (10/1)*1 + 10
1 > 20

wppt 05.03.2013 17:44

Ответ: Вопросы по XNA.
 
так не работает все-таки? А как надо?

wppt 05.03.2013 17:46

Ответ: Вопросы по XNA.
 
если неравенство неверно, значит, точка там не лежит, да?

pax 05.03.2013 17:46

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от wppt (Сообщение 254243)
А как надо?

:dontknow:

wppt 09.03.2013 15:13

Ответ: Вопросы по XNA.
 
решил позаморачиваться со своим физ. движком... наткнулся на хорошую статью: http://tt.pstu.ru/mnp09/mnp09/s5/bazin.htm
кто может прокомментировать сл код:

Код:

procedure Contact_Solve(c1, c2 : PBody; c : PContact);
var
  v1, v2, vr, t, j: TVector2;
  vrn, jn, jnOld, bounce, e, u, mass_sum,
  r1cn, r2cn, vrt, kn, nMass, jtMax, jt, jtOld,
  r1ct, r2ct, kt, tMass, jnAcc, jtAcc : TReal;
begin
  e := c1^.e*c2^.e;    // вычисляем общий коэффициент трения поверхностей
  u := c1^.f*c2^.f;    // и общий коэффициент эластичности
  {расчет общих коэффициентов может быть другой, например, средний арифметический: (c1^.f+c2^.f)/2.0}
  jtAcc := 0.0;
  jnAcc := 0.0;
  v1  := V2Add(c1^.velocity, V2Mul(V2Perp(c^.r1), c1^.w));
  v2  := V2Add(c2^.velocity, V2Mul(V2Perp(c^.r2), c2^.w));
  vr  := V2Sub(v2, v1);
  vrn := V2Dot(vr, c^.n);
  bounce := V2Dot(c^.n, V2Sub(v2, v1))*e;
  mass_sum := 1/c1^.m + 1/c2^.m;
  r1cn := V2PerpDot(c^.r1, c^.n);
  r2cn := V2PerpDot(c^.r2, c^.n);
  kn := mass_sum + r1cn*r1cn/c1^.i + r2cn*r2cn/c2^.i;
  nMass := 1.0/kn;
  jn := -(bounce + vrn)*nMass;
  jnOld := jnAcc;
  jnAcc := max(jnOld + jn, 0.0);
  jn := jnAcc - jnOld;
  t := V2Perp(c^.n);
  vrt := V2Dot(vr, t);
  t := V2Perp(c^.n);
  r1ct := V2PerpDot(c^.r1, t);
  r2ct := V2PerpDot(c^.r2, t);
  kt := mass_sum + r1ct*r1ct/c1^.i + r2ct*r2ct/c2^.i;
  tMass := 1.0/kt;
  // трение
  jtMax := u*jnAcc;
  jt := -vrt*tMass;
  jtOld := jtAcc;
  jtAcc := min(max(jtOld + jt, -jtMax), jtMax);
  jt := jtAcc - jtOld;
  j := V2Add(V2Mul(c^.n, jn), V2Mul(t, jt));
    // накладываем импульсы
  Body_ApplyImpulse(c1,V2Negative(j),c^.r1);
  Body_ApplyImpulse(c2,j,c^.r2);
end;


wppt 09.03.2013 18:16

Ответ: Вопросы по XNA.
 
кто же поможет?

pax 09.03.2013 20:12

Ответ: Вопросы по XNA.
 
ошибся форумом, это исходник паскаля

wppt 10.03.2013 19:21

Ответ: Вопросы по XNA.
 
тут знание паскаля не требуется... нужна помощь именно по этой функции...

wppt 03.04.2013 11:23

Ответ: Вопросы по XNA.
 
как выводить множество маленьких спрайтов? Допустим, у меня есть прямоугольная карта 100*100, и ее надо всю вывести на экран, у каждого элемента массива-карты своя текстура, вырезаемая из большой текстуры; также у каждого элемента свои собственные параметры могут быть. Проблема в том, что при многократном вызове spritebatch.draw фпс сильно падает, даже если общий размер текстуры, составленной из всех текстур всех клеток много меньше какой-нибудь другой одной достаточно большой текстуры... ах да и еще текстура самой клетки да и она сама - могут меняться...


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot