30.10.2012, 21:59
|
#54
|
Мастер
Регистрация: 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)
|
|