• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zapis i odczyt

0 głosów
59 wizyt
pytanie zadane 3 grudnia 2016 w OpenGL, Unity przez Damian_ Nowicjusz (180 p.)
Witam mam problem z zapisem liczby pieniędzy w Unity. Otóż zapisuje to za pomocą: PlayerPrefs.SetInt ("TotalMoney", PlayerPrefs.GetInt ("TotalMoney")+ collectPoints);

Wszystko było by dobrze gdyż podczas kilku gier stan "portfela" zapisuje się poprawnie, lecz później pojawiają się liczby nie wiadomo skąd. Proszę o pomoc.

1 odpowiedź

0 głosów
odpowiedź 3 grudnia 2016 przez niezalogowany

Twój opis nie pomógł zbyt bardzo, nie sądzisz że bezpieczniej jest użyć PlayerPrefs.GetInt ("TotalMoney", 0), tak aby na pewno pobierać jakąś wartość nawet gdy wpis TotalMoney nie istnieje?

Bez kodu wiele Ci nie pomożemy (tylko fragmenty odczyt/zapis), podobnie kroków do reprodukcji...

komentarz 3 grudnia 2016 przez Damian_ Nowicjusz (180 p.)

Skrypt który ma za zadnie wyświetlić stan pieniędzy w menu głównym:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class Highscore : MonoBehaviour {

	public Text highscoreText;
	public Text money;

	//public GameObject shopButtonPrefab;
	//public GameObject shopButtonContainer;

	//public Material playerMaterial;

	public int index = 0;

	public Material[] materials;
	public Renderer rend;





	void Start () 
	{
		//ZmianaSkina (0);

		highscoreText.text = "HighScore: " + ((int)PlayerPrefs.GetFloat("HighScore")).ToString();
		money.text = "Money: " + ((int)PlayerPrefs.GetInt ("TotalMoney")).ToString ();

		rend = GetComponent<Renderer> ();
		rend.enabled = true;
		index = 0;
}
}

W tym skrypcie pobieram stan zdobytych w meczu pieniędzy i dodaje do stanu ogólnego.

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Score : MonoBehaviour {

	public float score = 0;

	public int collectPoints = 0;

	private bool isDead = false;

	public Text scoreText;
	public Text PunktyText;
	public DeathMenu deathMenu;

	void Start () {
		
	}
	

	 void Update () {
		
		if (isDead)
			return;
	}


	public void Dystans(float sco)
	{
		score = sco;
		scoreText.text = ((int)score).ToString ();
	}

	public void Punkty(int pkt)
	{
		collectPoints = pkt;
		PunktyText.text = ((int)collectPoints).ToString ();
	}

	public void OnDeath()
	{
		isDead = true;
		if (PlayerPrefs.GetFloat ("HighScore") < score)
		PlayerPrefs.SetFloat ("HighScore", score);

		PlayerPrefs.SetInt ("TotalMoney", PlayerPrefs.GetInt ("TotalMoney")+ collectPoints);

		deathMenu.ToggleEndMenu (score);
	}


}

Nie mam pojęcia w czym tkwi problem może zrobić to przez zapis do jakiegoś pliku tekstowego czy coś. Gra jest na androida.

komentarz 3 grudnia 2016 przez niezalogowany

Po co rzutujesz GetInt na int skoro zwracana wartość to int? Czemu highscore trzymasz w float skoro i tak ostatecznie rzutujesz go na int? Generujesz w ten sposób szansę na błędy wynikające ze sposobu w jaki trzymane są liczby zmiennoprzecinkowe.

Na serio nie rozumiem po co rzutujesz też normalne zmienne typu int znowu na int, przecież to jest bez sensu: (int)collectPoints.

Musisz też pamiętać, że PlayerPrefs.SetXXX(...) z powodu optymalizacyjnych nie zapisują od razu danych na dysk, domyślnie jest to wykonywane na event OnApplicationQuit().

A więc ustawienie jakiejś wartości i jej pobranie zwróci wynik jeszcze z poprzedniego działania aplikacji: Co pokazuje przykład poniżej:

int myint = PlayerPrefs.GetInt("myint", 0); // zakładamy że myvar nie istnieje, myint = 5

myint += 5; // myint = 5
PlayerPrefs.SetInt("myint", myint);

myint = PlayerPrefs.GetInt("myint", 0); // myint = 0 !!!

Aby zapisać dane na dysk musimy użyć metody PlayerPrefs.Save():

int myint = PlayerPrefs.GetInt("myint", 0); // zakładamy że myvar nie istnieje, myint = 5

myint += 5; // myint = 5
PlayerPrefs.SetInt("myint", myint);
PlayerPrefs.Save(); // update wartości na dysku

myint = PlayerPrefs.GetInt("myint", 0); // myint = 5

Możliwe, że tutaj leży twój błąd ;)

komentarz 3 grudnia 2016 przez Damian_ Nowicjusz (180 p.)

To rzutowanie z int na int wiem że bezsensowne, ale ten te kody zmieniałem kilka razy wcześniej było mi już teraz nie wiem dokładnie po co ta zamiana. Wielkie dzięki za pomoc :)

Podobne pytania

0 głosów
1 odpowiedź 903 wizyt
pytanie zadane 12 października 2016 w PHP, Symfony, Zend przez Ditrix Mądrala (5,430 p.)
0 głosów
2 odpowiedzi 212 wizyt
pytanie zadane 28 lipca 2016 w PHP, Symfony, Zend przez rucin96 Użytkownik (500 p.)
0 głosów
2 odpowiedzi 141 wizyt
pytanie zadane 24 maja 2016 w C i C++ przez Kacperos_89 Początkujący (400 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

60,207 zapytań

105,878 odpowiedzi

219,908 komentarzy

32,423 pasjonatów

Przeglądających: 196
Pasjonatów: 7 Gości: 189

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...