Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
|
Forum - Polski Portal COLOBOTa |
|
|
"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
|
|
|
|
|
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 |
_________________
|
|
|
|
|
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 | Po co? 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 |
_________________
|
|
|
|
|
|
|
| |
|
|
|
|
Polski Portal COLOBOTa © 2008 - 2012 |
|
|