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

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

11

25.11.2014, 10:14

Du musst trotzdem nicht alles im loop ausführen und schon gar nicht auf dem Server. Du kannst weiterhin das Ergebnis eines Kampfes über so eine Funktion abschätzen. Will sich dein Spieler den Kampf jetzt angucken, so kannst du Clientseitig aus dem Kampfergebnis ein paar Aktionen erzeugen und die am Client animieren oder wie auch immer anzeigen. Solange der Spieler nicht in Echtzeit eingreifen kann kannst du alles vorberechnen. Genau wie die Geschichten dass der Spieler farmen geht. Hier greift er nicht ein. Wenn er also 8 Stunden farmen geht muss auf deinem Server nicht 8 Stunden lang irgendwas berechnet werden. Solche Dinge kannst du theoretisch auch direkt berechnen sobald man den Spieler los schickt, wobei es dann halt erst nach 8 Stunden angezeigt wird. Wie gesagt gibt es da verschiedene Möglichkeiten.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

12

25.11.2014, 10:45

Wenn du wirklich ne loop willst koenntest du dir ne fight klasse machen oder so:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var Fight = function(player, monster, socket) {
 this.player = player;
 this.monster = monster;
 this.socket = socket;
};

fight.prototype.myRound = function() {
 //Do whatever you want with the this.monster and this.player 

 if(this.socket) {
  this.socket.emit('If the client is connected send em the result of this round');
 }

 //If the monster is still alive go into the next round
 if(this.monster.health > 0) {
  this.myRound();
 } else {
  //Vielleicht das ergebenis in die Db schreiben oder so, das objekt selbst zerstoeren. Was auch immer
}
};


und wenn du jetzt nen neuen fight startest machst du irgendwie sowas

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var allFights = [];

//Kommt halt drauf an wie und wann du auf spieler input wartest
socket.on('startFight', function() {
//Du machst dir hier ein neues Monster das du bekaempfen willst 
var myMonster = new Monster();
//Wie auch immer du dein Spieler objekt mit dem socket verbunden hast..brauchst du natuerlich auch
//Und dann startest du einfach en neuen fight
var newFight = new Fight (player, monster, socket);
newFight.myRound();

//Save a reference
allFights.push(newFight);

});


Um so ne gaaaaaaaaaaaanz grobe Idee zu geben. Optimal ist natuerlich anders.

Vielleicht speicherst du den socket auch lieber im spielerobject, dann ist das auch einfacherer wieder zuzuordnen wenn ein Spieler disconnects und spaeter wieder connects.

Und die Monster/Player sollte dann auch einfach nur ein sails-model sein. Dann muesstest du ja einfach nur sowas wie .save() aufrufen und es sollte dann alles fuer dich tun.

edit: Schorsch hat aber natuerlich recht, du musst (und wahrscheinlich solltest) das nicht in so einer loop machen weil das eher unnoetig ist. Aber du kannst :D

13

25.11.2014, 10:50

Zitat

Du musst trotzdem nicht alles im loop ausführen und schon gar nicht auf dem Server. Du kannst weiterhin das Ergebnis eines Kampfes über so eine Funktion abschätzen.

Klar, gebe ich dir recht.

Zitat

Solange der Spieler nicht in Echtzeit eingreifen kann kannst du alles vorberechnen.

... und genau hier ist der Punkt - genau das soll er nämlich können.
Und nicht nur das - auf meiner "Später mal ..."-Liste steht auch noch, dass auch andere Spieler zu einem Kampf hinzustoßen können sollen - um mitzumachen, zuzugucken, etc.
Also der "Live"-Aspekt, die "Action" sind mir da schon sehr wichtig.

Ich weiß nicht ob du's kennst oder mitgemacht hast, aber ich möchte, dass sich das grob so "anfühlt" wie Diablo 2 mit einem Bot. :D

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

14

25.11.2014, 12:03

Klar kenne ich Diablo2 ;) Das hat mir in meiner Schulzeit einige schlaflose Nächte bereitet;) Ich glaube du wirst mit deiner Idee noch ganz andere Probleme bekommen als die Loops wenn ich mir so anhöre was du vor hast:) Mach dir mal Gedanken wie du ein Netzwerkspiel allgemein entwickeln würdest. Am Ende ist es nichts anderes was du da vor hast. Mit (klassischen) Browsergames hat das ja erst mal wenig zu tun.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

15

25.11.2014, 12:20

Zitat

Ich glaube du wirst mit deiner Idee noch ganz andere Probleme bekommen als die Loops wenn ich mir so anhöre was du vor hast

Haha, ja ... das glaube ich auch! :D
Aber wie gesagt, dass sind nur Hirngespinnste, die ich in meine "Später mal"-Liste reinballer, wenn mir solche Gedanken kommen, was man noch an Features machen könnte.
Also die Multiplayer-Features stehen erst mal hinten an.

Mit eurem Input habe ich auf jeden Fall die nächsten Wochen erst mal genug zu tun und ich habe auch das Gefühl, dass ich so jetzt mit dem Prototyp erst mal auf dem richtigen Weg bin.
Die Features, die ich da rein bringen will sind sehr beschnitten - wenn ich damit so weit bin, dann werde ich das Gerät vielleicht mal an geeigneter Stelle hier präsentieren.

Werbeanzeige