Wątek przeniesiony 2016-03-21 11:50 z C# i .NET przez ŁF.

zmienne w metodzie nie działają, zmienne globalne tak ale tylko dla jednego obiektu

0
		static void Predicted(Obj_AI_Base unit)
		{
			float time;
			float sintime;
			float stop = 0f;
			Vector3 InterPos = default(Vector3);
			Vector3 movevec = default(Vector3);
			Vector3 EndInterPos = default(Vector3);
			float xminus;
			float yminus;
			float d;
			time = 0.3f + ObjectManager.Player.Distance(unit)/1000;
			sintime = unit.MoveSpeed * time;
			Chat.Print(time+" "+stop+" "+sintime+" "+InterPos+" "+movevec);
			if (Game.Time * 1000 > stop + 13f)
			{
				Chat.Print("lol");
				InterPos.X = unit.Position.X;
				InterPos.Y = unit.Position.Y;
				movevec.X = unit.Path.LastOrDefault().X;
				movevec.Y = unit.Path.LastOrDefault().Y;
				stop = Game.Time * 1000;
			}
			if (Game.Time * 1000 > stop + 10f && Game.Time * 1000 < stop + 14f)
			{
				Chat.Print("lol2");
			}
		}

Nie przypisuje wartości do InterPos, movevec, stop. Wyświetla napis "lol", stop = "0", time i sintime oblicza normalnie dla interpos i movevec x=0, y=0, z=0. Napisu "lol2" już nie wyświetla bo stop cały czas jest 0.

Jeśli nie przypisze wartości na początku do zmiennych to błąd, mogę też bez przypisania zrobić np. float stop = new float() ale też nie działa i nie przypisuje do stop Game.Time * 1000:
error CS0165: Use of unassigned local variable 'stop'
error CS0170: Use of possibly unassigned field 'X'
error CS0170: Use of possibly unassigned field 'Y'

Gdy deklaruje zmienne stop, movevec, interpos jako globalne statyczne to wszystko działa ale ja potrzebuje tej metody dla wielu obiektów a przy zmiennej globalnej dla wszystkich obiektów oblicza te same wartości mimo różnych pozycji.

0

Czy ja źle coś robię czy to wina API/oprogramowania w którym tworzę ?

A jeśli zrobię coś takiego to wszystko działa:

using System;

namespace lel
{
	class Program
	{
		public static void Main(string[] args)
		{
			NiePrzypisujeDoZmiennejWartosci();
		}
		static void NiePrzypisujeDoZmiennejWartosci()
		{
			string hello = "lol";
			if (hello != "hey")
			{
				Console.WriteLine(hello);
				Console.ReadKey(true);
				hello = "hey";
			}
			if (hello == "hey")
			{
				Console.Write(hello);
				Console.ReadKey(true);
			} 
		}
	}
}
0

Czym jest Game.Time i jaką ma wartość?

0

Pomijając już styl nazywania zmiennych i to co pod nimi się znajduje, zasadnicze pytanie: czy używałeś debuggera ?

0
somekind napisał(a):

Czym jest Game.Time i jaką ma wartość?

Game.Time czas procesora od uruchomienia systemu w milisekundach
Vector3 to pozycje obiektów w grze 2d (3d teoretycznie stąd Vector3 poza tym API tego wymaga, ale wszystko się dzieje w 2d)

michu_cc napisał(a):

Pomijając już styl nazywania zmiennych i to co pod nimi się znajduje, zasadnicze pytanie: czy używałeś debuggera ?

Nie jeszcze :(


static float stop;
static Vector3 InterPos, ...;

i wszystko działa -> ale ja chcę zmienne lokalne w metodzie a nie globalne statyczne...

Debbuger użyję niedługo, programy neiktórych dobrych devów mają debbuger więc od nich zgapię :)

0
mar173 napisał(a):

Debbuger użyję niedługo, programy neiktórych dobrych devów mają debbuger więc od nich zgapię :)

WTF? Debugger jest częścią IDE. Piszesz kod na kartce?

No to po kolei:

  1. Najpierw definiujesz stop = 0
  2. Potem ustawiasz mu wartość na stop = 1000x
  3. Potem sprawdzasz czy 1000x > stop + 10, czyli 1000x > 1000x + 10. To równanie nigdy nie jest spełnione, więc warunek nigdy nie jest prawdziwy, zatem drugi tekst nie wypisuje się na ekranie.
0
michu_cc napisał(a):

Pomijając już styl nazywania zmiennych i to co pod nimi się znajduje, zasadnicze pytanie: czy używałeś debuggera ?

Z tego co mi piszą developerzy to nie da się w tym zrobić debugowania, w vs też się nie da bo najpierw trzeba być w grze aby program działał. To co ja robię jest też dobre Chat.Print(); i mam kontrolę nad każdą linijką nie wiem po co za wszelką cenę debugowanie, to że tak piszą w książce nie znaczy że tutaj mogę to zastosować... Jeśli dojdę do wprawy w programowaniu to pewnie będę tego używał ale jeśli tutaj się nie da to Chat.Print mi wystarczy.

0
somekind napisał(a):
mar173 napisał(a):

Debbuger użyję niedługo, programy neiktórych dobrych devów mają debbuger więc od nich zgapię :)

WTF? Debugger jest częścią IDE. Piszesz kod na kartce?

No to po kolei:

  1. Najpierw definiujesz stop = 0
  2. Potem ustawiasz mu wartość na stop = 1000x
  3. Potem sprawdzasz czy 1000x > stop + 10, czyli 1000x > 1000x + 10. To równanie nigdy nie jest spełnione, więc warunek nigdy nie jest prawdziwy, zatem drugi tekst nie wypisuje się na ekranie.

:) Nie masz racji z całym szacunkiem. Game.Time1000 jest w czasie rzeczywistym, gdy Game.Time1000 >stop + 14f
{ stop = Game.Time*1000}

Dalej nastepny kod z tekstem lol2:
if (Game.Time * 1000 >stop + 10f && Game.Time *1000<15f)
{
print lol2;
}

Drugi kod musi się wykonać bo stop jest zmienną odświeżaną przez 15ms więc Drugi warunek się wykona, Game.Time1000>stop+10f -> czeka 11ms i wykonuje się print lol2; przez 3milisekundy. Na początku ifa stop = Game.Time * 1000 z czasem stop jest mniejszy od Game.Time1000, pierwszy warunek to zmienia bo jeśli Game.TIme*1000 będzie większy niż poprzednia wartość stop + 15ms to stop dostaje wartość aktualnego czasu w ms. I tak program działa ciągle.

Pisałem już że wszystko działa ze zmiennymi static float stop; ,... jedynie jeśli deklaruje te zmienne w metodzie to nie chcą przyjmować wartości.

0

<quote="1237702">

mar173 napisał(a):

Debbuger użyję niedługo, programy neiktórych dobrych devów mają debbuger więc od nich zgapię :)

WTF? Debugger jest częścią IDE. Piszesz kod na kartce?

Nie skompiluje programu pisanego dla tego oprogramowania i nikt tego nie zrobi w IDE. Jedynie można zobaczyć co się dzieje podczas gry. Nie ma żadnej konsoli jest jedynie czat w grze który robi za konsolę.

0

Problemu nie ma w niedziałającym kodzie ale w tym że zmienne lokalne nie przyjmują wartości. Stop nie przyjmuje wartości Game.Time * 1000, Vector3 pozycje też nie przyjmują wartości pozycji obiektów.

Co do debugowania to nie ma możliwości kompilacji, debugowania w żadnym IDE. Mam możliwość w grze: wyświetlić koło wokół obliczonego punktu czy tekstu na ekranie czy zwrócić wartości zmiennych w czacie. Wszystko stosuję i zawsze mi wszystko wychodzi jedynie problem ze zmiennymi które w teorii działać powinny. Te zmienne działają tak jak stałe a deklaruje to jako zmienne...

I nie jest tak jak pisał somekind że stop przyjmuje wartość -> właśnie przychodzę z tym problemem że tej wartości nie przyjmuje, instrukcja działa nieustannie a stop nie przyjmuje Game.Time * 1000;

0

Zrobione za pomocą: Rozdział 7

1 użytkowników online, w tym zalogowanych: 0, gości: 1