wie setzen Sie die environment-Variablen in python-flask und jinja2

i am unable to set the environment variables from jinja2

<body>
    <h1>hi {{session['user']}}<h1>
        {{session['user']='Mad'}}
</body>

<body>
   <h1>
     hi {{session['user']}}
   <h1>
    {{session['user']='Mad'}}
</body>

Ich habe bereits erklärt session['user'] in python-code in der Flasche, aber ich bin nicht in der Lage, um es in jinja2, dass ist die mit dem folgenden html-code

-1
2019-09-17 08:23:55
Quelle
3 Antworten
+0
2019-09-17 08:54:04

Der wichtigste Teil des Problems ist, dass Sie verwenden sollten, prefabs für die Feuerbälle, und erstellen Sie eine neue Instanz der Feuerball prefab, wenn nötig. Dann würde ich von diesen 2 (oder beide gleichzeitig):

  1. Erstellen Sie "imaginäre" Grenzen: Dieses ist die einfachste von allen. Zum Beispiel, wenn Sie Ihre Feuerbälle position auf der y-Achse erreicht 50 ist, wird es zerstört werden. Können Sie erstellen, die diese Regeln für alle Dimensionen.

  2. Entfernung von der Ausgangslage: Sie wollen im Grunde zum speichern der Ausgangsposition des Objekts. Dann in der update-Methode berechnen Sie die derzeitige Entfernung vom es irgendwie wie:

    var f_pos = transform.position;
    double distance = Mathf.Abs(f_pos.x - startingPos.x) + Mathf.Abs(f_pos.z - startingPos.z) + Mathf.Abs(f_pos.y - startingPos.y);
    

Sorry wenn der code nicht funktioniert mit diesen Parametern habe ich nicht getestet, aber ich hoffe, Sie bekommen die Idee.

+0
2019-09-17 15:43:38

Auch dein Haupt-Problem scheint nicht zu sein, die Berechnung aber einen fehlenden Verweis. Ihr code ist bei weitem nicht genug, um zu sagen, warum es nicht funktioniert, aber ich werde es versuchen:

Im Fall das WanderingAI ist ein MonoBehaviour-Komponente (das scheint der Fall zu sein, da Sie versuchen, Zugriff auf transform

WanderingAI w = new WanderingAI();

ist ein absolutes no-go! Diese Komponente sollte angebracht werden, um ein GameObject und entweder bei der Instanzierung oder gefunden werden muss, zur Laufzeit dynamisch.

Ich würde vermuten, der fehlenden Referenz exception nicht geworfen wird für w, aber eher für die Linie

transform.position

in 0.000000e+0n.

Wir sehen nicht, wo oder wie Sie Instanziieren diese. Nur So ein Beispiel, Sie könnte (besser sehen Weise weiter unten), einfach nur die hand, die instanziiert Feuerball der Transform-Verweis, wer feuerte:

In der Feuerball in einem Feld

public Transform enemyTransform;

und dann legen Sie es zusammen mit der Instanziierung

public Fireball fireballPrefab;

...

var fireball = Instantiate(fireballPrefab, transform.position, transform.rotation);
fireball.enemyTransform = transform;

Um die position, die Methoden sind ziemlich redundant. transform.position ist immer öffentlich für alle GameObject und Componnet(MonoBehaviour) Referenz auf, damit, sobald Sie einen Verweis auf den Feind oder dein Feuerball (Objekt-oder Komponenten spielt keine Rolle), können Sie einfach direkt zugreifen, z.B.

enemy.transform.position

Und nur Allgemeine Hinweise: Methodennamen in c# sollte beginnen mit einem Großbuchstaben. Und speichern jeden einzelnen Wert in einer lokalen variable oder Feld " Klasse ist auch ziemlich unnötig.


Allerdings

Statt mit den Verantwortlichen Feind verwandeln, bei allen können Sie einfach speichern Sie die Feuerbälle eigene start-position. Dann würden Sie nicht haben, um über die Pflege der Feind nicht mehr. Auch die Einnahme der feindlichen Stellung in Konto Update funktioniert möglicherweise nicht richtig, wenn der Feind bewegt sich inzwischen ;)

Da du nur verschieben in der z-Richtung können Sie einfach überprüfen Sie die bisher zurückgelegte Strecke und würde nicht einmal eine Referenz benötigen, um den Feind

// Adjust in the Inspector
[SerializeField] private float range = 10;

// Stores the initial position
private Vector3 startPosition;

private void Start()
{
    // Store position before starting to move
    startPosition = transform.position;
}

private void Update ()
{
    transform.Translate(Vector3.forward * speed * Time.deltaTime);

    // Directly compare to the initial position
    // Without having to care who fired this ball
    if(Mathf.Abs(startPosition.z - transform.position.z) >= range)
    {
        Destroy(gameObject);
    }

    // Or simply
    if(Vector3.Distance(startPosition, transform.position) >= range)
    {
        Destroy(gameObject);
    }
}

Derzeit sind Sie auch nur zu bewegen in der globalen Z-Richtung .. ist das wirklich das, was Sie tun wollte? Sonst würde ich eher die richtige rotation bei der Instanziierung den ball und verschieben Sie in der lokalen wie in vorwärts-Richtung

transform.Translate(transform.forward * speed * Time.deltaTime);
+0
2019-09-17 15:43:38

Sehen Sie sich andere Fragen zu Tags an