Slot di Salvataggio… come fare?

Stai vedendo 25 articoli - dal 1 a 25 (di 56 totali)
  • Autore
    Articoli
  • #16057

    Dr.Frank
    Partecipante
    • Blenderista
    • Conversazioni totali42

    Salve a tutti, ultimamente mi diletto nella creazione di un gioco di avventura e c’è una domanda che mi pongo, come posso fare ad inserire nel menù principale un sottomenù dove ci sono tre slot da far scegliere al giocatore per salvare il gioco?

    Oppure, se ciò non si può fare, come faccio a far salvare i progressi del giocatore per poi ricaricarli in una futura partita? (Non mi riferisco al CheckPoint)

    Grazie mille.

    Dr.Frank

    #182642

    ccddxxff
    Partecipante
    • Blenderista
    • Conversazioni totali103

    potresti farlo attraverso python, scivendo e leggendo dei file txt che contengono magari il livello o punto dove sei arrivato e la salute del giocatore.

    #182643

    Biscuic
    Partecipante
    • Blenderista
    • Conversazioni totali52

    magari criptando il tutto o salvandolo in un file non leggibile/non modificabile: leggendolo si potrebbero modificare i dati di livello e hp

    #182644

    Dr.Frank
    Partecipante
    • Blenderista
    • Conversazioni totali42

    Ok ho tutti e due gli script di salvataggio e di caricamento, il problema è che quando si avvia il gioco il tutto parte dal menu principale, ora come faccio a lanciare lo script python di caricamento da li? In modo che mi porti nella schermata in cui ho salvato?

    #182645

    Dr.Frank
    Partecipante
    • Blenderista
    • Conversazioni totali42

    HO RISOOOLTO!

    Lo script che avevo era da check point, ne ho trovato un altro più adatto! Ho modificato le Api dello script a mio vantaggio e tutto funziona!

    Grazie a chi ha prestato attenzione al post.

    #182646

    Dr.Frank
    Partecipante
    • Blenderista
    • Conversazioni totali42

    Uff ecco un altro problema, sono riuscito solamente a far cambiare la scena dove in precedenza si aveva salvato, ma non so come mantenere le vite, i punti e le monete( 😳 ).

    Perfavore rispondetemi

    #182647

    ccddxxff
    Partecipante
    • Blenderista
    • Conversazioni totali103

    crei un file txt

    mioFile = open (“mieiSalvataggi.txt”, “w”)

    poi prendi le variabilii che ti servono ad esempio:

    obj = GameLogic.getCurrentScene().objects

    chkSave = obj

    vita = obj

    monete = obj

    le salvi nel file

    mioFile.write(chkSave)

    mioFile.write(vita)

    mioFile.write(monete)

    chiudi il file

    mioFile.close

    dovresti ottenere così un file del tipo

    se per esempio hsi

    punto di salvataggio n. 4

    vita 89

    monete 1020

    mieiSalvataggi.txt


    4

    89

    1020


    dopodichè in un altro script

    riapri il file ma in lettura quindi invece di ‘w’ devi mettere ‘r’

    obj = GameLogic.getCurrentScene().objects

    obj = mioFile.readline()

    obj = mioFile.readline()

    obj = mioFile.readline()

    mioFile.close

    l’ho scritto velocemente quindi penso ci sia qualche errorrino ma dovrebbe andare così.

    #182648

    Dr.Frank
    Partecipante
    • Blenderista
    • Conversazioni totali42

    grazie!! provo subito!

    #182649

    Dr.Frank
    Partecipante
    • Blenderista
    • Conversazioni totali42

    Non funge e, sinceramente non credo di aver capito bene,

    dovrei scrivere così?

    mioFile = open (“mieiSalvataggi.txt”, “w”)

    obj = GameLogic.getCurrentScene().objects

    monete = obj

    mioFile.write(monete)

    mioFile.close

    (Ho rimosso check point e Vita, dato che ancora sono inesistenti)

    Ora, il file che deve contenere le property dev’essere il protagonista o la moneta?

    riguardo il caricamento

    mioFile = open (“mieiSalvataggi.txt”, “w”)

    obj = GameLogic.getCurrentScene().objects

    monete = obj

    mioFile.write(monete)

    mioFile.close

    Scusa se sono così nabbo da non capire ma non ho affrontato cose di questa difficoltà  ( 😳 )

    #182650

    ccddxxff
    Partecipante
    • Blenderista
    • Conversazioni totali103

    allora,

    2 script

    Primo Script: Salva

    Code:
    import GameLogic as G

    # Prendo l’oggetto che contiene TUTTE le property, quindi l’oggetto contiene prop Vita, prop Monete e così via
    obj = G.getCurrentScene().objects[‘OBOggettoCheContieneLeProperty’]

    # apro il file in modalità  scrittura
    mioFile = open(“Salvataggio.txt”, “w”)

    # scrivo nel file il valore delle property
    mioFile.write(obj[‘nome property1’])
    mioFile.write(obj[‘nome property2’])

    # chiudo il file
    mioFile.close

    secondo script: Carica

    Code:
    import GameLogic as G

    # Prendo l’oggetto che contiene TUTTE le property
    obj = G.getCurrentScene().objects[‘OBOggettoCheContieneLeProperty’]

    # apro il file in modalità  lettura
    mioFile = open(“Salvataggio.txt”, “r”)

    #recupero il valore della property e la inserisco nella property nell’ordine di salvataggio
    obj[‘nome property1’] = mioFile.readline()
    obj[‘nome property2’] = mioFile.readline()

    # chiudo il file
    mioFile.close

    Attento! Le property vita, monete, puntodi salvataggio, devono stare tutte in un unico oggetto come ad esempio un empty.

    Se ci sono ancora dubbi chiedi.

    #182651

    Dr.Frank
    Partecipante
    • Blenderista
    • Conversazioni totali42

    E le property dell’empty devono essere int giusto?

    Poi le devo fare aumentare alla ricezione di messaggi?

    #182652

    ccddxxff
    Partecipante
    • Blenderista
    • Conversazioni totali103

    si devono essere int dato che ne devi aumentare o diminuire il valore.

    Per ricezione dei messaggi non ho capito bene cosa intendi

    #182653

    Dr.Frank
    Partecipante
    • Blenderista
    • Conversazioni totali42

    ad esempio, se la moneta collide con il personaggio, invia un messaggio all’empty, alla ricezione aumenta il valore della prop Moneta di uno.

    Ho provato già , diciamo che funziona ma il valore della property la ricarica a -1 O_O, poi quando carico la moneta non si elimina

    #182654

    ccddxxff
    Partecipante
    • Blenderista
    • Conversazioni totali103

    in che senso la ricarica a -1? Qunado avviene questo?

    Quote:
    poi quando carico la moneta non si elimina

    che vuol dire quando carichi la moneta non si elimine???

    #182655

    Dr.Frank
    Partecipante
    • Blenderista
    • Conversazioni totali42

    Torna a -1 quando premo L per ricaricare, poi quando il mio personaggio collide con la moneta essa sparisce e salva, poi al caricamento però rimane lì e la prop della moneta ritorna a -1, se vuoi ti passo il file.

    #182656

    ccddxxff
    Partecipante
    • Blenderista
    • Conversazioni totali103

    ok passa xkè non ti sto seguendo molto…

    #182657

    Dr.Frank
    Partecipante
    • Blenderista
    • Conversazioni totali42

    Scusa, l’hosting è lento, intanto ti dico che ho dato alla moneta un sensore near e quando si attiva, parte il python di salvataggio, invia il messaggio dell’aumento del valore della variabile delle monete all’empty e poi ho messo l’attuatore end object.

    Invece lo script di caricamento l’ho messo nella telecamera, ovvero alla pressione del tasto L si ricaricano le variabili, ma me le ricarica a -1…

    #182658

    ccddxxff
    Partecipante
    • Blenderista
    • Conversazioni totali103

    prova così, alla moneta dai solo una property per il near, magari la chiami ‘Moneta’ impostata a Bool, True;

    al player, cioè a quell’oggetto che si scontrerà  con la moneta li metti il near con property settato col nome della prop che hai dato alla moneta, e gli aggiungi, se non c’era prima, la properti int ‘NumeroMonete’ (per non confordersi con la prop Moneta dell’oggetto Moneta). Ora al near colleghi un controller and collegato ad un attuatore di tipo property settato ad ‘NumeroMonete’, Add. Poi aggiungi un’altro sensore di ipo property settato a ‘NumeroMonete’, Changed, collegato al python di salvataggio. Così facendo, il gioco prima implementa il numero di monete, e al cambiamento del numero di monete attiva il python di salvataggio. Per essere sicuri di questo, ogni volta che collidi con una moneta, apri il file di salvataggio che si trova nella stessa directory del file.blend e verifica che ciò accada. Ricordati di chiuderlo e riaprirlo fil file txt altrimenti non noti l’aggiornamento.

    #182659

    Dr.Frank
    Partecipante
    • Blenderista
    • Conversazioni totali42

    Non capisco verso l’ultima parte del tuo messaggio, sono arrivato fino al sensore changed, ok, poi?

    #182660

    ccddxxff
    Partecipante
    • Blenderista
    • Conversazioni totali103

    il changed serve ad essere sicuri che il salvataggio venga effettuato al cambiamento del valore del numero delle monete.

    Quindi il changed va settato con il nome dell prop che conta le monete. Ad esso va attaccato il python di salvataggio. Attento però. L’oggetto che deve avere il sensore changed deve avere anche la prop ‘numeroMonete’ o come si chiamava lei.

    Quindi eccoti un piccolo schema della situazione che dovresti avere:

    Oggetto moneta:

    – Property: Moneta, tipo Bool, valore True;

    Oggetto Player:

    – Property: NumeroMonete, tipo int, valore 0;

    – Sens: Near(prop: Moneta) –>Contr: and –> Actu: Property(NumeroMonete,operazione: Add)

    – Sens: Property(changed, prop: NumeroMonete)–> contr: python (py di salvataggio)

    #182661

    Dr.Frank
    Partecipante
    • Blenderista
    • Conversazioni totali42

    Si questo l’ho capito ma se aggiungessi un’altra moneta ci sarebbero dei problemi, perchè dovrei dare ad essa la property moneta e, se il player collide con una delle due monete, tutte e due sparirebbero!

    #182662

    ccddxxff
    Partecipante
    • Blenderista
    • Conversazioni totali103

    cioè se tu colpisci una moneta, pure se l’altra sta parecchio distante spariscono entrambe? è questo che stai dicendo?

    #182663

    Dr.Frank
    Partecipante
    • Blenderista
    • Conversazioni totali42

    Esattamente, perchè hanno la stessa property

    #182664

    ccddxxff
    Partecipante
    • Blenderista
    • Conversazioni totali103

    non è perchè anno la stessa property, è perchè evidemente all’oggetto player hai messo un near, al near del player hai attaccato gli attuatori end object delle monete…

    fai così:

    Aggiungi una property al player di nome Player di tipo bool con valore true.

    Elimina qualiasi end object che hai creato per la moneta e ora al solo oggetto moneta aggiungi un sensore

    near con property player e a questo near gli attacchi l’attuatore end object

    #182665

    Dr.Frank
    Partecipante
    • Blenderista
    • Conversazioni totali42

    Già  fatto, ora però siamo sempre lì, lo script di salvataggio, come devo procedere?

Stai vedendo 25 articoli - dal 1 a 25 (di 56 totali)

Devi essere loggato per rispondere a questa discussione.