mmofacts.com

Update: Javascript Karte

gepostet vor 16 Jahre, 9 Monate von cherry
Hi Leute,
ich hab mich nach laengerer Zeit mal wieder meiner Leidenschaft hingeben und einen Prototypen fuer eine Browsergame-Karte gebastelt. Ich wollte sie einmal herzeigen und hoffe auf Meinungen und Kommentare.
[SIZE=14]Hier gehts zum Prototypen[/SIZE]
Einheiten koennen bewegt werden (anklicken und dann auf Pfeile klicken), sie koennen die Bunker betreten (auf Bunkerfeld bewegen) und verlassen und die Karte kann gescrollt werden.
Zur Technik:
MySQL haellt alle Daten in 3 Tabellen vor, PHP gibt die Seite und die Karte aus und stellt auf Serverseite die asynchrone API bereit und Prototype hilft beim JavaScript.
Das ganze ist recht einfach gehalten - wie gesagt ein Prototyp. Es sollte im Firefox und Internet Explorer 7 laufen - Internet Explorer 6 klappt auch. Session Cookies muessen akzeptiert werden vom Browser.
Update:
Es gibt eine neue Version (incl. Ticker und Angriffsfunktion). Leider kann ich keine oeffentliche Demo vorzeigen. Es gibt eine Version auf meinem Server, wenn es sich jemand anschauen mag einfach eine PM an mich oder hier antworten. Das ganze ist sehr rudimentaer. Der Quellcode ist auch zu haben (die neue Version und die Version die hier zu sehen ist): code.google.com/p/jsgmap/
Aussehen tut es so:
cherry
gepostet vor 16 Jahre, 9 Monate von Dunedan
Warning: auth::require_once(html/login.php) [function.auth-require-once]: failed to open stream: No such file or directory in /home/netsh70821/html/dev/release2/classes/auth.class.php on line 160
Fatal error: auth::require_once() [function.require]: Failed opening required 'html/login.php' (include_path='.:/usr/local/apache/php5.2.5/lib/php') in /home/netsh70821/html/dev/release2/classes/auth.class.php on line 160
gepostet vor 16 Jahre, 9 Monate von cherry
Ohne Session Cookies geht natuerlich nix :-)
Aber ein guter Hinweis, sone haessliche Fehlermeldung sollte da nicht kommen. Edit: fixed.
gepostet vor 16 Jahre, 9 Monate von MrMaxx
HiHo....
Erstmal wozu zwei requests pro Spielzug? Liefer doch den neuen Zustand der Karte als Antwort auf den "Zug-Abgeben" request und nicht immer als eigenständigen.
Ich finde es schade, das du dem Client so wenig logik verpasst.
Dadurch, das du die komplette Karte holst versperrst du dir die Möglichkeit der Dynamik (Transition, Rotation, Animation) deiner Spielfiguren. Du benutzt doch schon Scriptaculous...warum also nicht auch das wirklich mächtigen Morph() einsetzen?
Ansonstn ist die Karte recht solide, ist aber da sie fast keine Logik enthält nichts besonderes.
So long...
Maxx
gepostet vor 16 Jahre, 9 Monate von cherry
Eine gute Idee den 2. Request zu sparen und gleich die Karte zurueckzuliefern. Daran habe ich noch nicht gedacht. Ist das erste mal, dass ich mit so async Zeug rummache.
Auf Clientseite ist praktisch keine Logik, da hast Du recht. Es war so wie es im Moment ist am einfachsten. Ist auf jeden Fall eine der naechsten Ausbaustufen - den Client die Karte generieren lassen und ihm nur die dazu notwendingen Informationen geben. Scriptaculous setze ich nicht ein - es ist nur noch im Sourcecode weil ich damit was ausprobiert habe.
gepostet vor 16 Jahre, 9 Monate von ThaDafinser
Nett gemacht!
Das einzige was ich anpassen würde, ist das die Karte automatisch sich bewegt wenn man an den Rand fährt und dann die Positionen nachlädt.
gepostet vor 16 Jahre, 9 Monate von Cpt
Ich würde es toll finden, wenn man entweder die Spielfigur nach dem anwählen mit der Tastatur steuern könnte, oder alternativ die Pfeile eingeblendet bleiben würden. Ich denke auf Dauer wäre es sehr nervig jedes mal wieder die Spielfigur auswählen zu müssen.
gepostet vor 16 Jahre, 9 Monate von Kapsonfire
ein tip: nimm die starcraft bilder raus solange du keine rechte dazu hast und es vor hast mit den bildern öffentlich zu machen
KÖNNTE teuer werden.
gepostet vor 16 Jahre, 9 Monate von cherry
Original von Cpt
Ich würde es toll finden, wenn man entweder die Spielfigur nach dem anwählen mit der Tastatur steuern könnte, oder alternativ die Pfeile eingeblendet bleiben würden. Ich denke auf Dauer wäre es sehr nervig jedes mal wieder die Spielfigur auswählen zu müssen.

Hm, das ist ein wenig komplizierter umzusetzen. Ich habe genau das schon versucht um ehrlich zu sein aber hab es dann sein lassen weil ich es fertigstellen wollte. Generell waere wohl das Ziel, dass eine Einheit mehrere Felder laufen kann und nur ein Mausklick dafuer noetig ist. Das ist definitiv eine Anforderung fuer zukunftige Karten.
Original von Browser-Games World

ein tip: nimm die starcraft bilder raus solange du keine rechte dazu hast und es vor hast mit den bildern öffentlich zu machen
KÖNNTE teuer werden.
Da mache ich mir gar keine Sorgen, da es nicht veroeffentlicht wird. Und wenn waere es so unscheinbar und klein, dass sich niemand darueber aufregen wuerde.
gepostet vor 16 Jahre, 9 Monate von MrMaxx
Das mit den Pfeiltasten ist wirklich sehr einfach umzusetzen.
prototypejs.org/api/event/observe

function moveByKeypress(event){
if(event.keyCode == Event.KEY_UP){
moveUnit(selUnitX+1, selUnitY);
} else if(event.keyCode == Event.KEY_DOWN){
moveUnit(selUnitX-1, selUnitY);
} else if(event.keyCode == Event.KEY_RIGHT){
moveUnit(selUnitX, selUnitY+1);
} else if(event.keyCode == Event.KEY_LEFT){
moveUnit(selUnitX, selUnitY-1);
}
}
Event.observe(
document,
'keypress',
moveByKeypress
);
Dieses CodeFragment (Event.observe) musst du nur einmal in der Methode unitClick() ausführen. Die Funktion moveByKeypress(event) sollte irgendwo eingebunden werden.
Damit weist du den Key Events schonmal die richtigen Funktionen zu. Da du jedoch nicht willst, dass die Pfeiltasten etwas bewirken, wenn keine Figur ausgewählt ist, musst du in der Funktione moveUnit() noch das Überwachen abmelden.

Event.stopObserving(
document,
'keypress',
moveByKeypress
);
Ich hoff mal, das das bei dir klappt. Falls du dennoch Probleme haben solltest hab ich dir meinen Skype Kontakt per PM geschickt.
So long...
Maxx
gepostet vor 16 Jahre, 9 Monate von cherry
Danke fuer den Tipp.
Dass das mit den Tasten einfach ist und von Prototype schoen gekapselt wird habe ich mir schon gedacht.
Was Cpt aber wollte ist wohl dass nach der Bewegung die Einheit noch "markiert" ist, also dass noch bekannt ist wo sie sich befindet. Das ist schwieriger weil es sein kann, dass sie sich nicht bewegt hat. selUnitX und selUnitY sind nach dem reload undefiniert - der Server muesste also mit der Karte auch zurueckliefern ob die Bewegung erfolgreich war oder nicht.
gepostet vor 16 Jahre, 8 Monate von Nuky
..oder der Client weiß das selbst.
gepostet vor 16 Jahre, 8 Monate von cherry
Kann er nicht, da ein anderer Spieler auch Einheiten bewegen kann..

gepostet vor 16 Jahre, 8 Monate von Kapsonfire
Der Client weiss doch wenn er als letztes selektiert hat, somit kann der Client sobald er neue Daten empfängt diesen letzten erneut selektieren.
Oder habe ich da was falsch verstanden?
gepostet vor 16 Jahre, 8 Monate von cherry
Technisch gesehen weiss der Client nur wo die Einheit war die bewegt wurde.
Ich habe es in meinem lokalen Prototypen schon anders geloest. Update folgt bald :-)
gepostet vor 16 Jahre, 8 Monate von cherry
Original von MrMaxx

Event.stopObserving(
document,
'keypress',
moveByKeypress
);

Der Vollstaendigkeit wegen: keypress wird seit 1.6 nicht mehr in keydown umgesetzt. Es ist darum notwendig keyup oder keydown zu verwenden.
gepostet vor 16 Jahre, 8 Monate von MrMaxx
upsi...hatte das aus ner JS-Klasse kopiert, die ich vor ner weile mal geschrieben hatte. Scheinbar wars noch 1.5 ... danke dir für die Rückmeldung
Maxx
gepostet vor 16 Jahre, 8 Monate von Cpt
Naja alternativ wäre es wohl auch denkbar, dass der User einfach einen Punkt auf der Karte anklicken kann und die Spielfigur sich dann dahin beweg. Dabei müsste allerdings die kürzeste bzw. günstigste Route unter Beachtung von eventuellen Hindernissen berechnet werden.
gepostet vor 16 Jahre, 8 Monate von riki1512
Original von Browser-Games World
ein tip: nimm die starcraft bilder raus solange du keine rechte dazu hast und es vor hast mit den bildern öffentlich zu machen
KÖNNTE teuer werden.

Da mache ich mir gar keine Sorgen, da es nicht veroeffentlicht wird. Und wenn waere es so unscheinbar und klein, dass sich niemand darueber aufregen wuerde.
Oouuuhh ! Da täuscht du dich soo gewaltig ! Wenn es jemand bemerkt bist du dran, glaube mir. Was uns der Anwalt für Patent- und Markenrecht in seiner Wahlfach-Vorlesung an der FH erzählt hat - unglaublich. Da durften Leute 4000€ für mindere Dinge hinblättern (und damit waren Sie nach dem Vergleich noch gut weggekommen).
Edit: obwohl, ich glaube er sagte auch, solange die Seite 0 Cent Einnahmen bringt, kann man vieles machen - aber ein Werbebanner drauf und das war's.
gepostet vor 16 Jahre, 8 Monate von cherry
Original von riki1512
Original von Browser-Games World
ein tip: nimm die starcraft bilder raus solange du keine rechte dazu hast und es vor hast mit den bildern öffentlich zu machen
KÖNNTE teuer werden.

Da mache ich mir gar keine Sorgen, da es nicht veroeffentlicht wird. Und wenn waere es so unscheinbar und klein, dass sich niemand darueber aufregen wuerde.
Oouuuhh ! Da täuscht du dich soo gewaltig ! Wenn es jemand bemerkt bist du dran, glaube mir. Was uns der Anwalt für Patent- und Markenrecht in seiner Wahlfach-Vorlesung an der FH erzählt hat - unglaublich.
Hm, www.blizzard.com/us/legalfaq.html - Infos zur Benutzung von Blizzard Material und novelconcepts.co.uk/FlashElementTD/play.asp ein enorm populaeres Spiel welches auch Blizzard Material nutzt. Ich taeusche mich also nicht gewaltig. Wenn man sich nicht mit bescheuerten Firmen anlegt die einen an der Waffel haben laeuft man mit so einem kleinen Projekt meiner Meinung nach keine Gefahr.
Der Sourcecode ist uebrigens jetzt zu haben: code.google.com/p/jsgmap/ inklusive einer neuen Version von der es leider keine oeffentliche Demo gibt. Wenn sie jemand anschauen will einfach eine PM an mich oder hier antworten.

Auf diese Diskussion antworten