|
Polski Portal COLOBOTa COLOBOT Polish Portal |
|
Problemy [programowanie] - "void object::NazwaFunkcji()" i "float NazwaF
MNR26 - 07-11-2009, 19:12 Temat postu: "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 - 08-11-2009, 16:29
Kod: | float object::MierzKat (object item) |
Berserker - 18-11-2009, 22:21
Kod: | float object::MierzKat (object a, object b) |
Za b wstawiasz po prostu 'this' i masz
pipok - 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.
Berserker - 19-11-2009, 13:28
A zepsuje? Jak zadziala i bez tego to dobrze, jak nie zadziala to dopisze sobie te 10 znakow...
pipok - 19-11-2009, 14:06
Nie zepsuje. Będzie tylko bardziej skomplikowane niż to potrzebne.
Berserker - 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
|
|