Montag, 13. April 2020

Saint Opia Konzeptrender mit IRay Shader

Ein Render des Saint Opia Projekt. Ein Versuch, die Originalszene mittels IRay Shader aufzupeppen. K├Ânnte noch ein bisschen mehr Schliff vertragen, denke ich.

Kazandra im Barbarenoutfit

Ein weiterer Konzeptcharakter mit einem Outfit, welches gerne zu Spielbeginn gefunden wird.

Samstag, 11. April 2020

Der Moderitter

Hat der Ritter nicht eine wunderbar modische R├╝stung? ­čśë
Ein Konzeptrender und mir f├Ąllt sogleich auf, dass das Schwert seinen Umhang zerschnippelt. Die lieben Details... ­čÖł


Donnerstag, 9. April 2020

Charakter Konzept Sasha Psy Dagger

Etwas f├╝r die Augen. Ein Konzeptrender einer der Spielfiguren mit dem Arbeitstitel Sasha Psy Dagger f├╝r zuk├╝nftige Projekte. Eine Galerie/Katalog, eine Wiki und ein neuer Blog sind in Arbeit





Mittwoch, 8. Januar 2020

Nintendo Switch Unterst├╝tzung f├╝r Construct

Aktuell unterst├╝tzt Construct die Nintento Switch nicht. Es l├Ąge an Nintendo Construct in die Liste unterst├╝tzter Spiele - Entwicklung - Engines aufzunehmen. Das Team von Construct w├Ąre laut Forenbeitrag begeistert von dem Gedanken.

Falls es Dich genauso begeistert, ist hier auf change.org eine Petition an Nintendo am laufen. Unterst├╝tze sie mit Deiner Stimme!


Sonntag, 5. Januar 2020

Wait Aktion in Construct 2


Construct verf├╝gt ├╝ber eine M├Âglichkeit, die in einem Event auf die Wait Direktive folgende Aktionen zu pausieren. Hier findet sich eine Kurzfassung der wichtigsten Punkte zur Wait System Aktion.

Alle selektierten Objekte (zum Beispiel ├╝ber Pick by comparison) werden dabei gemerkt und die folgenden Aktionen um die gew├╝nschte Zeit verz├Âgert ausgel├Âst. Dasselbe gilt f├╝r Sub-Events. Alle anderen Events werden normal weitergef├╝hrt.


Die gesamten Selected Object Lists (SOL - selektierte Objektlisten) werden gespeichert und die Wait Aktion unterbricht das aktuelle Ereignis. Nach Ablauf der eingegebenen Wartezeit wird das SOL erneut geladen und alle Aktionen und Sub-Events nach dem Wait Ereignis ausgef├╝hrt.

Jeder weiterer Aufruf von Wait ruft erneut den obigen Prozess aus.
Vorsicht: Nur gilt dabei zu merken, dass die Zeit vo

Zu guter Letzt und der eigentliche Grund, warum diese  Kurzanleitung zusammengetragen wird, ist ein Trick, welcher alle subsequenten Aufrufe nach Wait ans Ende der Ereigniskette. Anders gesagt, die Aktionen werden erst am Schluss der Systemschleife ausgef├╝hrt.

Weitere Systemfunktionen gibt es hier im Manual und im Tutorial Wie wird die Wait Aktion benutzt auf der Scirra Seite. Das Tutorial ist aufschlussreicher als das Handbuch, welches bloss auf das Tutorial verweist. ;-)

(... und noch weitere M├Âglichkeiten gibt es mit Signal und Wait for Signal). Das markiere ich mal mit Erweiterbar. Entweder gehe ich hier oder in einem neuen Blogpost darauf ein.

Projektzustand in der Tabelle einer mySQL Datenbank speichern

Events in Construct
(in Arbeit)
Im Construct 2 Editor sind folgende Events und Aktionen n├Âtig:
  • Bei Klick auf den Savebutton Aktion "System -> Save" aufrufen
  • On Save Complete und On Save Fail abfangen
    • Variable "query" mit Standartwert "saves=" & URLEncode(SaveStateJSON ) setzen 
    • Der On Save Complete Event ruft mittels Ajax die Datei "ajax_save.php" auf und ├╝bergibt query als Wert
    • Der On Save Fail Event sorgt daf├╝r, dass Du was mitbekommst, falls was schief gehen sollte. Hier sorgst du entweder mittels Console.Log() oder einem Textobjekt f├╝r R├╝ckmeldung.
  • Damit sp├Ąter wieder drauf zugegriffen werden kann, gibt's ein Klick Event f├╝r einen Load Button und dieser ruft wieder AJAX auf, um "ajax_load.php" ins System zu kriegen.
  • On Ajax Complete mit Tag "load" abfangen
  • System Aktion Load from JSON ausf├╝hren mit Ajax.LastData ausf├╝hren
  • Wiederum auf On Load Complete und On Load Fail eingehen

Server
Beschaff dir online einen Server oder lade XAMPP herunter, um dir ziehmlich schnell einen eigenen Server einzurichten.
Wenn Du Zugriff auf den myPHPAdmin hast, kannst Du dort die Datenbank "games" und die Tabelle "savegames" gleich direkt erstellen. Ansonsten kannst Du auch den Code vom Punkt "Initialisiere Tabellen" ben├╝tzen.


Verbindung zum mySQL Server

F├╝r den ersten Teil erstellst Du eine Datei mit Namen "database.php". In dieser wird die Verbindung zum mySQL Server hergestellt.

// Damit alle Fehler angezeigt werden, ansonsten auskommentieren.
error_reporting(E_ALL);

define ( 'MYSQL_HOST',  'localhost' );
define ( 'MYSQL_CLIENT',  'root' );
define ( 'MYSQL_PASS',  '' );
define ( 'MYSQL_DBASE', 'c2games' );

$db_link = mysqli_connect (MYSQL_HOST, MYSQL_CLIENT, MYSQL_PASS, MYSQL_DBASE);

if ( $db_link )
{
    echo 'Verbindung erfolgreich: ';
    mysqli_set_charset($db_link, 'utf8_bin');

    // print_r( $db_link);
}
else {
    echo ('FEHLER: Keine Verbindung m├Âglich: ' . mysqli_error());
}


Initialisiere die Tabellen
Falls Du sicher gehen willst, dass die Datenbank und Tabellen existieren kannst Du das Skript "database.php" erweitern. Damit wird die Datenstruktur in jedem Fall erstellt, was den Code einfacher z├╝geln l├Ąsst. Das System wird quasi geeicht.

$query = 'CREATE DATABASE c2saves';
$result = mysqli_query($query);
 
$query = 'CREATE TABLE savegames ( saveName VARCHAR(255) NOT NULL PRIMARY KEY, saveData TEXT)';
$result = mysqli_query($query);

In der Tabelle speichern

Der  zweite Teil besteht darin eine Datei "ajax_save.php" anzulegen. Diese f├╝llst Du mit dem folgenden Code und passt ihn nach Deinem Gusto an:

header('Access-Control-Allow-Origin: *');
include 'database.php';
define('TABLE', 'savegames');

$values = 'saveName=' . mysql_escape_string($_POST['saveName']);
$values .= ', saveData=' . mysql_escape_string($_POST['saveData']);
 
$query = 'INSERT INTO TABLE SET { $values } ON DUPLICATE KEY UPDATE TABLE SET { $values }';

$result = mysqli_query($query);
echo $result; // hier kann mit dem Ajax Objekt in Construct die R├╝ckmeldung ausgegeben werden?>

Savegame aus der Datenbank laden
Teil drei der Geschichte; Wir wollen die Daten ja auch wieder aus der DB rausholen k├Ânnen, oder? Hier k├Ânnten wir obiges Beispiel anpassen und so umschreiben, dass es mittels weiterer POST Variable, wie besipielsweise "modus" angesteuert wird, ob es nun Daten aufruft oder speichert. Der Einfachheit halber werden wir hier aber daf├╝r die Datei "ajax_load.php" erstellen und Du kannst wiederum den folgenden Code einf├╝gen:

header('Access-Control-Allow-Origin: *');



include 'database.php';

define('TABLE', 'savegames');


$condition = 'saveName="' . mysql_escape_string($_POST['saveName'].'"');
$query = "SELECT saveData FROM TABLE WHERE $condition "

$result = mysqli_query($query);
echo $result; // die gespeicherten JSON Daten werden f├╝r Construct's AJAX Objekt zur├╝ckgegeben

Zum Schluss
Dieser Eintrag lebt von Erfahrungen und passendem Lesestoff. Dabei kann er sich jederzeit weiterentwickeln. Momentan befindet er sich noch in der Fassungsphase. Dennoch hoffe ich Dir erste Ideen oder gar ein fertiges Produkt in die H├Ąnde gelegt zu haben.
Gleichwohl sei gewarnt, denn das Testprogramm und die Skripte zum Test dieses Tutorials sind gerade erst im entstehen. Sieh es so, dass ich mir hier gerade selber eine Anleitung schreibe, um meine Arbeitsmethodik zu verbessern.

Quellen
Das Construct Handbuch
https://www.construct.net/en/tutorials/speichern-momentanen-1872?highlight=25370#comments
https://www.informatikzentrale.de/mysql-tabelle-anlegen.html
https://www.php-kurs.com/mysql-datenbank-anlegen.htm