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

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 :P

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 :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.
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 :)

Powered by phpBB modified by Przemo & WRIM © 2003 phpBB Group