Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
 Polski Portal COLOBOTa - COLOBOT Polish Portal
Forum - Polski Portal COLOBOTa
Strona głównaStrona główna UżytkownicyUżytkownicy GrupyGrupy StatystykiStatystyki


Poprzedni temat «» Następny temat
"void object::NazwaFunkcji()" i "float NazwaF
Autor Wiadomość
MNR26


Dołączył: 07 Lis 2009
Posty: 1
Wysłany: 07-11-2009, 19:12   "void object::NazwaFunkcji()" i "float NazwaF

Robię dość skomplikowany (a jednocześnie całkiem długi) program dla "działa latającego", i z powodu zwiększenia ogólnej czytelności skryptu, postanowiłem rozdzielić jedną główną funkcje na kilka mniejszych.

Napotkałem się jednak na następujący problem:

Potrzebuję funkcji która będzie zwracała kąt na który powinno obracać się działo pojazdu ( aim (kat) ; )


Kod:

extern void object::PowietrznyŁowca()
{object item;
float kat;
...
item = radar(AlienAnt);
...
kat = MierzKat(item);
aim(kat);
fire(0.1);
...
}




Więc zrobiłem taką funkcję z użyciem "void object::MierzKat (object item)"...


Kod:
 
void object::MierzKat (object item)
{
float odl, kat, ja, on, KatFB = this.pitch;
ja = (this.position.z);
on = (item.position.z);
odl = distance2d(this.position,item.position);


float  h;
if(ja == on) h = ja;
else {h = on - ja;}

kat = atan(h/odl);

kat = kat + KatFB;

return kat; // "Zły typ dla przypisania"



... , jednak w ten sposób mogę jedyne wpisać ( return; ), a nie mogę zrobić wtedy tak aby zwracała wartość "kat" do funkcji głównej ( return kat; ).



Dlatego potem spróbowałem "float MierzKat (object item)" dzięki której mogłem użyć "return kat;"...

Kod:
 
float MierzKat (object item)
{
float odl, kat, ja, on, KatFB = this.pitch; // Zmienna (this) nie została zadeklarowana"
ja = (this.position.z); // Zmienna (this) nie została zadeklarowana"
on = (item.position.z);
odl = distance2d(this.position,item.position); // Zmienna (this) nie została zadeklarowana"


float  h;
if(ja == on) h = ja;
else {h = on - ja;}

kat = atan(h/odl);

kat = kat + KatFB;

return kat;


... , ale wtedy funkcja nie mogła odczytać pozycji pojazdu.

Moim pytaniem jest jak "połączyć" właściwości obu tych funkcji tak aby mogła używać "return kat;" i odczytywać zmiennych pojazdu takich jak: "this.position" i "this.pitch"?

PS1: W kodzie używam "kat" zamiast "kąt" gdyż czasami miewam problemy z wpisywaniem polskich znaków w colobocie.
PS2: ups, przycieło mi nazwę tytułu i opis tematu.
Powinno być " "void object::NazwaFunkcji()" i "float NazwaFunkcji()" " w tytule,
i "Jak można używać "return value;" i odczytywać zmiennych "this.position" w funkcji innej niż extern?". (nie wiedziałem jak krócej można opisać ten problem :-? )
 
     
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 08-11-2009, 16:29   

Kod:
float object::MierzKat (object item)
_________________
1Tbps Project && Telecomix Network

 
 
     
Berserker 
Dark Ness


Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy
Wiek: 24
Dołączył: 24 Mar 2009
Posty: 496
Skąd: Bigos
Wysłany: 18-11-2009, 22:21   

Kod:
float object::MierzKat (object a, object b)

Za b wstawiasz po prostu 'this' i masz :P
_________________
 
 
     
pipok 


Dołączył: 24 Cze 2009
Posty: 53
  Wysłany: 19-11-2009, 09:33   

Berserker napisał/a:
Kod:
float object::MierzKat (object a, object b)

Za b wstawiasz po prostu 'this' i masz :P
Po co? :shock: Przecież ta funkcja jest metodą obiektu, który wykonuje kod, więc 'this' jest zbędne. Nie bez powodu adibdol napisał

// Przypadek czy niedbalstwo? -adiblol

Cytat:
float object::MierzKat (object item)
Bo tyle wystarcza, żeby funkcja miała dostęp do pól (stanów) i metod bota, który ją wykonuje.
Ostatnio zmieniony przez adiblol 20-11-2009, 16:19, w całości zmieniany 1 raz  
 
     
Berserker 
Dark Ness


Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy
Wiek: 24
Dołączył: 24 Mar 2009
Posty: 496
Skąd: Bigos
Wysłany: 19-11-2009, 13:28   

A zepsuje? Jak zadziala i bez tego to dobrze, jak nie zadziala to dopisze sobie te 10 znakow...
_________________
 
 
     
pipok 


Dołączył: 24 Cze 2009
Posty: 53
Wysłany: 19-11-2009, 14:06   

Nie zepsuje. Będzie tylko bardziej skomplikowane niż to potrzebne.
 
     
Berserker 
Dark Ness


Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy
Wiek: 24
Dołączył: 24 Mar 2009
Posty: 496
Skąd: Bigos
Wysłany: 19-11-2009, 14:34   

Gdyby to bylo 5 linijek to bym sie zgodzil, bo masz racje, ale 'komplikacja' programu to tutaj troche przesadzone wyrazenie :)
_________________
 
 
     
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Polski Portal COLOBOTa © 2008 - 2012