Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

91

28.02.2011, 00:12

Wenn wir schon bei der Geschmacksfrage sind, so würde ich gerne folgende (ggf. subjektiven) Punkte einwerfen:
1. es mag sein, dass C# deutlich intiutiver ist als z.B. C++ aber keinerlei Programmiererfahrungen hat und auch nicht viel Zeit zum Lernen investieren will, sind die "Relikte" (a.k.a. Skriptsprachen) ggf. schneller zu lernen (vorallem wenn sich derjenige nicht zwingend um Typen etc. kümmern muss und sowas wie list("hallo Nr. ",13, Schuesse(19),43.3) einfach funktioniert. Auch ist OOP nicht zwingend einsteigerfreundlich (und manchmal auch garnicht direkt hilfreich bei kleineren Logikeinheiten).
2. Eine klare Trennung zwischen verschiedenen Bereichen(Engine/Spiellogik/Spielmechanik) mag manchmal als störend empfunden werden, kann aber sehr hilfreich sein. Ohne Einsatz verschiedener Sprachen mit entsprechenden "Grenzflächen" kann das natürlich auch erreicht werden, erfordert aber deutlich mehr Disziplin und Selbstkontrolle.
3. Mit Skriptsprachen möchte ich als Programmierer erreichen, die Entwicklungszeit ggf. auf Kosten der Performance zu minimieren, das durch entsprechende Sprachkonstrukte behindert oder gefördert werden kann. Diese Minimierung fällt mir bei C# z.B. zu niedrig aus (ggf. eigenes Unvermögen) wohingegen ich mit Python deutlich mehr schaffe (und dabei arbeite ich mit python auch erst seid ein paar Monaten und habe nur sehr wenig pythonic krams gelernt).

Geht eigentlich mit den C# "Skripten" auch so "on-the-run" Änderungen?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

92

28.02.2011, 00:42

Geht eigentlich mit den C# "Skripten" auch so "on-the-run" Änderungen?
Sollte klappen, also Klasse/Assembly neuladen... Im Grunde müsste alles gehen, was man mit Debugging auch kann und das ist ja bei Java und .Net ne Menge.

Bezügl. OOP kann man sicher mit vorverarbeitung viel vor dem "Scripter" verbergen. Wie gesagt, die Frage ist wohl was projektbezogen schneller geht. Und da kommt es dann ziemlich auf die pot. Scripter an und wie stark man sich mit .Net o.Ä. auseinander setzen will - jemand, der lieber C++ entwickelt und nur projektbedingt .Net einsetzt, ist mit einer Scriptsprache vielleicht glücklicher.

daG

Treue Seele

Beiträge: 130

Wohnort: Hamburg

  • Private Nachricht senden

93

06.03.2011, 02:37

Ok, ich habe jetzt mal versucht Klassen und Funktionen mit Hilfe von Reflections an JS durch zu reichen. Es funktioniert zwar, doch leider ist IronJS noch nicht wirklich ausgereift :|

Hier mal eine Beispiel-Klasse

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[JavaScript("Hero")]
public class Hero
{
    public Hero(String name)
    {
        this.Name = name;
    }

    [JavaScript("name")]
    public String Name
    {
        set;
        get;
    }

    [JavaScript("onHit")]
    public FunctionObject OnHit
    {
        set;
        get;
    }

    public override string ToString()
    {
        return "I am a hero and my name is " + this.Name;
    }

    [JavaScript("say")]
    public void Say(String message)
    {
        Console.WriteLine(this.Name + ": " + message);
    }

    [JavaScript("hit")]
    public void Hit(CommonObject self, Double damage)
    {
        this.OnHit.Call(self, damage);
    }

    [JavaScript("sayYourName")]
    public void SayYourName()
    {
        Console.WriteLine("My name is " + this.Name);
    }

    [JavaScript("prototypeTest")]
    public static void PrototypeTest(ObjectProxy hero)
    {
        Console.WriteLine("prototype to static method: " + hero.Get<String>("name"));
    }
}


Hier der Aufruf:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ScriptContext script = new ScriptContext();
script.PublishAssembly(Assembly.GetCallingAssembly());
//script.PublishClass(typeof(Hero));

script.Execute(
@"
var hero1 = Hero('Foo');
var hero2 = Hero('Bar');

puts('initial name: ' + hero1.name);
puts('initial name: ' + hero2.name);

hero1.name = 'Uber Foo';
hero2.name = 'Uber Bar';

puts('changed name: ' + hero1.name);
puts('changed name: ' + hero2.name);

hero1.sayYourName();
hero2.sayYourName();

hero1.onHit = function(damage) {
    hero1.say('ouch! lost ' + damage + 'hp');
};

hero1.hit(10);

Hero.prototypeTest(hero1);

inspect(hero1);
inspect(hero2);
"
);


Und hier die Ausgabe

Quellcode

1
2
3
4
5
6
7
8
9
10
initial name: Foo
initial name: Bar
changed name: Uber Foo
changed name: Uber Bar
My name is Uber Foo
My name is Uber Bar
Uber Foo: ouch! lost 10hp
prototype to static method: Uber Foo
I am a hero and my name is Uber Foo
I am a hero and my name is Uber Bar


IronJS ist jetzt komplett gekapselt hinter dem ScriptContext welches hinter der Bühne mittelst Reflection die wildesten Sachen macht damit das funktioniert :lol:

Wenn IronJS ausgereifter ist und ich es in meinem Projekt erfolgreich benutze, werde ich es auf GitHub veröffentlichen.

Werbeanzeige