Wert erhöhen um 1

  • Hi, ich versuche in einem struct den Wert einer Variable immer im 1 zu erhöhen. Leider passiert nicht viel. Der Wert beleibt immer bei 1.


    Die Variable Dir hat den Wert 1. Wenn ich zu Brick.x + Dir mache, dann sollte der Wert doch 1 sein und im nächsten Druchlauf sollte der Wert zu 2 werden...


    Verstehe nicht was hier falsch ist.



    und so sieht es klassisch aus ->

    Code
    position.x = position.x + dir;
  • Was du aktuell machst, ist es auszulesen was X + Dir ist.
    Wenn du jedes mal den Wert erhöhen möchtest, musst du die Variable auch quasi überschreiben/verändern.
    Dies machst du mit SET. Wenn du deine Variable ins Fenster ziehst, hast du die Möglichkeit zwischen Get und Set. Mit Get ließt du nur den Wert der Variable aus, mit Set kannst du diese auch verändern.



    Es gibt auch die "Increment Node" dafür, wenn du immer genau um 1 erhöhen möchtest.
    Schau dir dazu mal hier unseren Wiki Eintrag an

    Das gibt es auch fürs subtrahieren und nennt sich "decrement":


    Ich hoffe dies hilft dir schonmal ein wenig weiter. Kann leider gerade selbst keine Beispiele zeigen. Immer wenn ich hier im Forum bin, bin ich zufälligerweise an dem Rechner wo keine Engine installiert ist :D


  • Danke... :) ich dachte in [Make brick] schreibt man den neuen Wert rein...


    das mit dem Increment/decrement geht in diesem Fall nicht. Weil Dir mal 1 und das nächste mal -1 ist und so die Bewegungsrichtung vorgibt.

    • Offizieller Beitrag

    Ich weiß ob dein Blueprint so fertig ist. "Dir" ist eine Floot Variable. In Make brick, läuft deine X Position rein. Die änderst du ja mit dem "+"

    Y ist bei dir 0. Der Make brick output ist X & Y. Du konverstierst X und Y zu einer Node. Diese beiden Floatwerte werden an "Break brick" übergeben. Dort splitest du diese beiden Werte wieder auf.

    Wenn du Y nicht änderst, dann müsste Y ja immer 0 sein oder ?


    Daher frag ich mich ob du Make bzw Break brick überhaupt brauchst ?


    Du könntest "dir" ja auch X nennen und für Y auch noch eine Variable machen der du 0 als default Wert gibst.

    Oder du nennst die Varaible "Dir_X" bzw "Dir_Y"

  • Stimmt, du machst Break, Make und wieder Break. Eigentlich kannst du von der Plus-Node direkt in das ToText.

    Du kannst auch übrigens mit rechtsklick auf die Variable Brick und diese auch direkt splitten, dann brauchst du das Break gar nicht mehr. Spart Nodes.

    Das geht z.B. auch bei Vectoren etc. da diese ja auch aus mehreren Floats bestehen.

  • ...

    Daher frag ich mich ob du Make bzw Break brick überhaupt brauchst ?

    Die Position wir in einem struct gespeichert (hätte auch einen vector nehmen können, aber just for fun) die Y brauche ich, wenn der Stein nach unten fallen muss. Bin noch nicht so weit. Kämpfe mit diesem Blueprint-Zeug rum :) werde wohl doch lieber auf "normales" programmieren wechseln, aber jetzt bin ich schon mal dabei und bleibe mal dabei.


    Stimmt, du machst Break, Make und wieder Break. Eigentlich kannst du von der Plus-Node direkt in das ToText.

    Du kannst auch übrigens mit rechtsklick auf die Variable Brick und diese auch direkt splitten, dann brauchst du das Break gar nicht mehr. Spart Nodes.

    Das geht z.B. auch bei Vectoren etc. da diese ja auch aus mehreren Floats bestehen.

    Werde ich ausprobieren sobald ich wieder vor meinem eigenen Rechner sitze.....Danke!

    • Offizieller Beitrag

    Die Position wir in einem struct gespeichert (hätte auch einen vector nehmen können

    Wenn irgend wann noch Z mit Spiels kommt, brauchst du einen Vector. Ein Vector macht doch auch mehr Sinn um XYZ zu speichern.


    Du speicherst in einem struct warum ?


    Ein Struct wird eher verwendet Daten zu gruppieren. zb um viele Informationen zu einem Charakter zu speichern. Somit hat der Charakter eine eigene Datenbank wo Informationen über ihn drin stehen.

    Man kann natürlich auch Informationen aus einer Variable in ein Struct schreiben um diese Daten als Struct vom Clint an den Server oder umgekehrt zu senden. Das ist performanter als zig Variablen einzeln zwischen Clint und Server zu synchronisieren.

    Lesbarkeit und Performance spielen mit Sicherheit auch eine Rolle aber eben nicht wenn du nur zwei Floats in dein Struct schreibst.


    Wenn du das so aufbauen willst, solltest du nicht alles in einem Struct schreiben. Weil das wäre dann genau das Gegenteil von dem zuwas Structs eigentlich gedacht sind. Sie sollen eher alles übersichtlicher machen und nicht umgekehrt.

  • naja, das struct speichert in diesem Fall zwei integer-Werte. Somit bewegt sich das Objekt in einem Imaginären Raum. Dabei kann das Objekt 8 Schritte von seinem Startpunkt aus nach links gehen und 8 Schritte wieder zurück.


    Der Grund hierfür ist, das Objekt kann auch außerhalb der Spielfelds erstellt werden. Das ist dann der Fall wenn drei Steine erstellt werden. Das erst in an Position X = 1, dass zweit an Position X = 0 und das dritte an Position X = -1.


    Somit muss sich das Objekt keine Gedanken machen ob es außerhalb des Spielfelds ist und u.U. außerhalb eines Array-Feld.


    Das Objekt wird an das Spielfeld übergeben. Das Spielfeld ist verantwortlich für die korrekte Positionierung des Objekts. Wenn sich die Position außerhalb des Spielfelds befindet wird es auch nicht "gezeichnet" und somit nicht in das Array-Feld geschrieben.


    Das war die Idee dahinter.

  • stimmt....wenn man sich das Video von der Unity-Version vom Spiel anschaut, dann sieht man wie die Steine komplett aus dem Spielfeld verschwinden und wieder "reinlaufen"...

    Das meinte ich gar nicht. Ob sie raus oder reinlaufen ist da irrelevant. Sie bewegen sich halt nach rechts und links und bei jeder gültig abgeschlossenen Stufe eins nach oben. Sie bewegen sich halt nicht auch noch nach vorne oder hinten.


    Man könnte, da jetzt ein Array "Spalten" nehmen, Breite 7, oder was auch immer, und ein zweites Array "Zeilen" Höhe 11 und in dieses Array dann das Array Spalten reinpacken. Zumindest würde ich das in gewöhnlichen Programmiersprachen so machen, wie C# oder C++ etc. Ob das in BPs so funktioniert, ehrlich gesagt habe ich das noch nicht ausprobiert.

    Aber es gibt für jede Programmierlösung natürlich auch verschiedene Wege. Von daher ist eine begrenzte Struktur mit Zeile und Spalte natürlich auch eine dieser Möglichkeiten.

  • Man könnte, da jetzt ein Array "Spalten" nehmen, Breite 7, oder was auch immer, und ein zweites Array "Zeilen" Höhe 11 und in dieses Array dann das Array Spalten reinpacken. Zumindest würde ich das in gewöhnlichen Programmiersprachen so machen, wie C# oder C++ etc. Ob das in BPs so funktioniert...


    gibt sicher mehr als eine Lösung. Du kannst auch ein 1 Dimensionales Array nehmen und es behandeln wir ein zwei Dimensionales.


    7x11 = 77....statt array[7][11] kannst du auch array[77] machen und über eine geschickte Umrechnung Spalten und Zeilen "simulieren"


    hier positioniere ich die Steine auf diese Art. Man kann das dann auch zurückrechnen.



    und keine Ahnung welche perversen Programmierpraktiken man da noch anwenden kann. :D


    Ich lerne BP erst seit einer Woche und ich denke nicht das BP und ich gute Freunde werden, aber du kannst damit machen was auch immer du willst....es ist eben auch eine Programmiersprache, aber in einer anderen Form.

  • Ja klar. So kann man es auch machen. Dachte nur, dass es einfacher ist eventuelle Werte zu speichern, wenn man die Zeilen einzeln aufführt. Aber klar, so geht es natürlich auch.

    Meine Beschreibung entsprach halt einem 3D-TicTacToe, welches ich mal auf dem, ich glaube, es war noch der C64, geschrieben habe. Oder war es gar noch der TI 99/4A? Aber ist ja auch egal.


    Somit muss ich natürlich auch zugeben, dass meine Kenntnisse in Sachen Programmierung teilweise schon sehr lange her sind. Und etwas Gelerntes gegen etwas Neues im Kopf zu tauschen ist natürlich schwerer, als etwas Neues zu lernen. Also wenn deine Methode optimaler ist, warum nicht?

  • Somit muss ich natürlich auch zugeben, dass meine Kenntnisse in Sachen Programmierung teilweise schon sehr lange her sind. Und etwas Gelerntes gegen etwas Neues im Kopf zu tauschen ist natürlich schwerer, als etwas Neues zu lernen. Also wenn deine Methode optimaler ist, warum nicht?

    Haha...ich habe auch auf dem C64 programmiert....mit Sprites und keine oder drei Farben und wenig Auflösung und mit Poke-Befehlen....das waren Zeiten. Ohne Internet und trotzdem haben wir was gelernt. Wie ging das? :D