Gra shooter 2D - strzelanie przeciwników i system punktów życia przeciwnika 8988 13

O temacie

Autor Nekron197

Zaczęty 27.12.2012 roku

Wyświetleń 8988

Odpowiedzi 13

Nekron197

Nekron197

Użytkownicy
posty192
Propsy13
  • Użytkownicy
Witam. Chciałbym się zapytać was, jaki powinien być warunek na wystrzał materiału (kulki) z przeciwnika, jeśli spełniony zostanie warunek np.
if(gracz jest naprzeciwko przeciwnika)
   {
      WystrzalKulki;
   }
A druga sprawa, to taka, że chcę, aby mój przeciwnik miał 100 punktów życia. W skrypcie naboju mam określone ile ma zabierać punktów życia, i w skrypcie przeciwnika mam zdefiniowaną funkcję:
public static float StanPrzeciwnika = 100; Tylko, że to działa tylko na jednego przeciwnika, a reszta przeciwników pada na jeden strzał i koniec.

Proszę o szybką pomoc!
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
zabierać punktów życia, i w skrypcie przeciwnika mam zdefiniowaną funkcję:
public static float StanPrzeciwnika = 100; Tylko, że to działa tylko na jednego przeciwnika, a reszta przeciwników pada na jeden strzał i koniec.

Proszę o szybką pomoc!
Po pierwsze to POLE !!! nie funkcja :P Mówiłem ci wszystko jest strasznie pojebane ;d  2 klasy do naboju ... osobna dla pocisku gracza i osobna dla pocisku przeciwnika to paranoja jakaś :P

Nekron197

Nekron197

Użytkownicy
posty192
Propsy13
  • Użytkownicy
poprostu chodzi oto, że w pocisku gracza mam zdefiniowany kierunek lotu prawo, a przeciwnik z tej strony nadchodzi, to co? Ma strzelac za siebię?
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Klasa pocisku powinna mieć

Kierunek lotu (przykładowo float x,y;)
moc (ilość zabieranego HP int hp;)
i ewentualnie booleanda który będzie miał zapisane czy pocisk jest nasz czy przeciwnika i wtedy masz jedną klasę która się będzie przydawać przez całą grę (bo będziesz mógł zmieniać wszystko obrażenia kierunki wszystko )

Nekron197

Nekron197

Użytkownicy
posty192
Propsy13
  • Użytkownicy
Ale ja nie chce tego! To już mnie doprowadza do frustracji! :ayfkm:   Chce tylko wiedzieć jak powinna wyglądać linijka warunku, a nie żeby była jedna klasa pocisku! W programowaniu chyba jest tak, ze jest kilka możliwości zrobienia jednej czynności, a ja chcę wiedzieć co powinienem wpisać w warunek if i co się stanie po jego wykonaniu! Powtarzam! Jeśłi gracz jest naprzeciw przeciwnika, przeciwnik strzela! Tylko to chce wiedzieć!!! Moc ustaloną pocisku mam, i chcę aby wszyscy przeciwnicy mieli tyle samo hp co ten pierwszy!

P.S. Nie za bardzo wiem co to Booleand
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
A druga sprawa, to taka, że chcę, aby mój przeciwnik miał 100 punktów życia. W skrypcie naboju mam określone ile ma zabierać punktów życia, i w skrypcie przeciwnika mam zdefiniowaną funkcję:
public static float StanPrzeciwnika = 100; Tylko, że to działa tylko na jednego przeciwnika, a reszta przeciwników pada na jeden strzał i koniec.

Proszę o szybką pomoc!
Bo jest to pole statyczne, co oznacza, że jak zmienisz tę wartość, to zmienisz ją każdemu obiektowi z tej klasy. Podsumowując, usuń słowo static.

Nekron197

Nekron197

Użytkownicy
posty192
Propsy13
  • Użytkownicy
Próbowałem, ale potem wywala mi błąd w Unity i nic więcej nie da rady zrobić. Błąd to:
Assets/_Skrypty/Naboj.cs(39,31): error CS0120: An object reference is required to access non-static member `Przeciwnik.stanPrzeciwnika'
A skrypt naboju to:

using UnityEngine;
using System.Collections;

public class Naboj : MonoBehaviour {


public float szybkoscNaboju;
public GameObject Eksplozja;

// Use this for initialization
void Start ()
{

}

// Update is called once per frame
void Update ()
{

float ruch = szybkoscNaboju * Time.deltaTime;
transform.Translate(Vector3.right * ruch);

if(transform.position.x > 10)
{
Destroy(gameObject);
}

}



void OnTriggerEnter(Collider InnyObiekt)
{
if(InnyObiekt.tag == "enemy")
{
Przeciwnik.stanPrzeciwnika = Przeciwnik.stanPrzeciwnika = -50;
}

if(Przeciwnik.stanPrzeciwnika <= 0)
{
Instantiate(Eksplozja, transform.position, Quaternion.identity);
Destroy(gameObject);
Debug.Log("Trafiony!");

Destroy(InnyObiekt.gameObject);
Destroy(gameObject);



//DODAWANIE PUNKTOW
Gracz.punkty += 100;
}

}


}

EDIT

Ten błąd podany na górzę jest w unity pokazany 3 razy. Jest on taki sam, tylko w innych linijkach np. (linijka 39), (linijka 36).
I jeszcze jeśli nie ma static wpisanego, nie ma auto uzupełniania tej linijce if(Przeciwnik.stanPrzeciwnika = 0) gdy wpisuję stanPrzeciwnika
 


Nekron197

Nekron197

Użytkownicy
posty192
Propsy13
  • Użytkownicy
Oż kurde! xD Popierdzieliły mi się języki! chodzi mi właśnie o język C#!
Druga sprawa to taka, że jak bym wpisał w dziale Developing -> Unity Problematyka, to czekałbym jakiś miesiąc na odpowiedź...
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Przeciwnik.stanPrzeciwnika = Przeciwnik.stanPrzeciwnika = -50;  
Tu masz źle. Odwołujesz się do pola w klasie a nie w obiekcie tej klasy !!!

Nekron197

Nekron197

Użytkownicy
posty192
Propsy13
  • Użytkownicy
To jak powinno to wyglądac poprawnie? Sory za tak małą wiedzę, ale na początku korzystałem z poradników tworzenia gry w unity 3D na mepi.pl, ale tam nie było nic takiego, i prubuję sam coś sklecić :)
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Poczytaj sobie o podstawach programowania, chociażby tu: http://www.centrumxp.pl/dotNet/154,02-Programowanie-obiektowe.aspx
O klasach i obiektach: http://www.centrumxp.pl/dotNet/312,06-Klasy-i-obiekty.aspx

Poczytaj o polach, jakich używać w danej sytuacji.

Jak przeczytasz, to powinieneś zrozumieć, czemu masz takie błędy.

Nekron197

Nekron197

Użytkownicy
posty192
Propsy13
  • Użytkownicy
Ok... Jest tam napisane o klasach, ale nie wiele z tego rozumiem... Jak to się ma do punktów życia przeciwnika?
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
no musisz zrobić OBIEKT klasy przeciwnik

// tu masz klasę z konstruktorem !!!
public class przeciwnik {
public int hp;
public przeciwnik(int _hp){
hp = _hp;
}
}

tworzysz coś gdzie będziesz przechowywał OBIEKTY KLASY PRZECIWNIK lub pojedynczy obiekt

przeciwnik[] tab = new przeciwnik[2];
tab[0] =  new przeciwnik(100);
tab[1] =  new przeciwnik(200);

lub

List<przeciwnik> przeciwnicy = new List<przeciwnik>();
przeciwnicy.Add(new przeciwnik(100));
przeciwnicy.Add(new przeciwnik(200));

lub

przeciwnik obiekt1 = new przeciwnik(100);
przeciwnik obiekt2 = new przeciwnik(200);

Potem zabierasz życie OBIEKTOWI np
tab[1].hp = 50;lub
przeciwnicy[1].hp = 50;lub
obiekt1.hp = 50;


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry