Показать сообщение отдельно
Старый 30.10.2012, 21:59   #54
IgorOK
Мастер
 
Аватар для IgorOK
 
Регистрация: 26.10.2009
Сообщений: 1,194
Написано 615 полезных сообщений
(для 2,209 пользователей)
Ответ: Альтернатива скриптовику.

Сообщение от radiobutton Посмотреть сообщение
А у меня чем отличается процесс?

Вместо блокнота только нужно свое приложение небольшое написать. В котором будит таже кнопка сохранить. И тоже текстовое поле в котором можно будит вводить код. Когда будишь нажимать на сохранить код будит автоматически компилироваться в dll сборку. А можно вообще не компилировать. А хранить в зашифрованном виде c# код. И компилировать уже при запуске игры расшифровывая файлы.

При этом скорость работы кода на IL в разы быстрее чем скорость работы ваших интерпритаторов.


using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using Microsoft.CSharp;

namespace ConsoleApplication2
{
    class Program
    {
        static long Millisecs()
        {
            long[] p = new long[12];

            p[0] = 31; p[1] = 28; p[2] = 31; p[3] = 30; p[4] = 31; p[5] = 30;
            p[6] = 31; p[7] = 31; p[8] = 30; p[9] = 31; p[10] = 30; p[11] = 31;
            if ((DateTime.Now.Year - 2012) % 4 == 0)
            {
                p[1] = 29;
            }
            long n = 0;
            for (int i = 0; i < DateTime.Now.Month - 1; i++)
            {
                n += p[i];
            }
            return Convert.ToInt64(((((n + Convert.ToInt64(DateTime.Now.Day)) * 24 + Convert.ToInt64(DateTime.Now.Hour)) * 60 + Convert.ToInt64(DateTime.Now.Minute)) * 60 + Convert.ToInt64(DateTime.Now.Second)) * 1000 + Convert.ToInt64(DateTime.Now.Millisecond));
        }

        static void Main(string[] args)
        {

            long l1 = Millisecs();

            for (int i = 0; i < 1000; i++)
            {
                string s = @"

using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using hero_namespace;

namespace script_namespace
{
    public class script1
    {
        Hero gamer1;
        int gamer1_x, gamer1_y;
        double gamer1_dx, gamer1_dy;
        GraphicsDevice gd;
        SpriteBatch sb;

        public script1(GraphicsDevice gd, SpriteBatch sb)
        {
            gamer1_x = 200; gamer1_y = 200;
            gamer1_dx = 80; gamer1_dy = 80;
            this.gd = gd; this.sb = sb;
            gamer1 = new Hero(gamer1_x, gamer1_y, 20, 20, Color.Blue, gd, sb);
        }

        public void update(GameTime t)
        {
            gamer1.x = gamer1_x + (int)(Math.Cos((t.TotalGameTime.TotalSeconds)) * gamer1_dx);
            gamer1.y = gamer1_y + (int)(Math.Sin((t.TotalGameTime.TotalSeconds)) * gamer1_dy);
        }

        public void draw()
        {
            gamer1.draw();
        }
    }
}";


          Dictionary<string, string> providerOptions = new Dictionary<string, string>
         {
           {"CompilerVersion", "v4.0"}
         };

                CompilerParameters compilerParameters = new CompilerParameters();
                compilerParameters.GenerateInMemory = true;
                CompilerResults compileResults = new CSharpCodeProvider(providerOptions)
                    .CompileAssemblyFromSource(compilerParameters, s);
            }


            l1 = Millisecs() - l1;
            Console.WriteLine(l1);
            Console.Read();
        }
    }
}


компиляция 1000 раз моего скрипта из прошлого примера занимает 23456 милисекунд. тоесть 23 милисекунды на скрипт. Имхо большая часть времени уходит на составление метаданных т.к. скрипт маленький.

Теперь подумай сколько времени тебе нужно чтобы дотянуться мышкой в блокноте до кнопки сохранить?

Единственное это не подходит для самосовершенствующихся приложений, которым необходимо переделывать свой код несколько сот раз в секунду. Но мы кажется говорим об играх.
Возьми пожалуйста это:


По существу: Иди проспись.
(Offline)
 
Ответить с цитированием