17. december 2005 - 18:43Der er
28 kommentarer og 1 løsning
Fejl i koden - OBS: Avanceret
Hej eksperter!
Jeg er ved at lave et action-spil set oppe fra... Nu vil jeg lave fjendernes kunstige intelligens. De skal vende sig mod én, hvis der ikke er noget mellem fjenden og spilleren ('_root.player'). Resten af den kunstige intelligens er ligegyldig.
Metode: Jeg får fjenderne til at sende små usynlige objekter ('_root.test') afsted mod spilleren i uendelig høj fart, og hvis disse rammer spilleren, før de bliver blokeret eller bevæger sig ud af banen, skal fjenden, der afsendte objektet vende sig mod spilleren.
Her er koden, der udelukkende er placeret i fjendernes movieclips:
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
men jeg kan ikke følge dig :S Hvor indgår det i din kode, at det er fjenden der skal dreje sig... Kan kun se, at dine små test-objects skal dreje sig - velogmærket dém, som man jo ikke kan "nå" at se...
Uddyber du ikke lige en smugle?
Synes godt om
Slettet bruger
18. december 2005 - 15:48#6
Jo, da... Fjenden skal "skyde" usynlige punkter mod spilleren... Hvis de rammer, skal fjenden dreje sig efter én (se linie 11 som du nævnte som en mulig fejl). Resten af koden er helt simpel, så det har jeg ikke skrevet... Men du håner vel ikke mit sprogbrug? Jeg synes selv, at min metode er noget... "Avanceret"... Den er i hvert fald... "Kreativ" (om det så er godt eller dårligt, det, øh...)! Jeg har faktisk spurgt, om det er muligt at teste om der en noget imellem to objekter... Men fik ikke svar. Så derfor denne halvondsvage metode!
Er det for at "fjenden" kan finde ud af, hvor spilleren er henne - eller hvad er formålet med denne ide?
Og derudover, hvis du vil lave noget, der bare er en smule avanceret (hvilket vi nok stadig er ret langt fra), så bør du kaste dig over objekt-orienteret programmering og ActionScript2 - det er til hver en tid nemmere og mere overskueligt :)
Synes godt om
Slettet bruger
20. december 2005 - 13:09#8
Hmm... Jeg ved godt, jeg virker lidt noobed... Det er jeg så også, men pyt med det!! Fjenden skal tjekke om der er noget imellem den selv og spilleren. Hvis der ikke er, skal den dreje sig efter spilleren. Kan dette gøres nemmere? (Håber jeg MEGET!)
Hvad kan der være imellem? Du kan jo løbe alle objekter igennem og teste. Eller du kan lave punkterne på linjen og hitteste med potentielle objekter. Du behøver jo ikke rent faktisk lave et movieclip - du kan også teste med et vilkårligt punkt.
Hvis din while ikke kører, så er det fordi betingelsen aldrig er sand. Punktum. Hvorfor den ikke er det, skal jeg ikke kunne sige. Der er jo nogle variabler, der ændrer sig, så du kan jo undersøge, hvilken værdi de har og dermed finde ud af, hvorfor betingelsen aldrig er sand. Og at skrive true er kun pænere - det vil stadig virke :)
Angående det andet spørgsmål, angående ikonet, har jeg selv løst det - åbnede det med Notepad 2 :D
Synes godt om
Slettet bruger
20. december 2005 - 17:20#18
Nå virker det! Problemet var, at jeg brugte _root._width og _root._height; det ville den ikke! Så nu bruger jeg 800 og 600... Desuden kludrede jeg også først lidt i mine koder - men det er jo en anden sag...
Jeg ville lave passende classes til det. Umiddelbart en Player, Enemy og en GameManager eller noget i den stil. Der bliver lidt mere overskueligt, hvis man har den slags. Så kan de have nogle metoder som Enemy.calculateAngleToPlayer(p:Player) og den slags.
Jeg har læst en smugle om dette. Og jeg har fundet ud af (som Hjælpen siger) at hvis jeg laver en fil:
Person.as
med følgende kode:
class Person { var pName:String; var pAge:Number; function Person(iName:String, iAge:Number) { pName = iName; pAge = iAge; } function getName():String { return pName; } function getAge():Number { return pAge; } }
og en flash fil:
personManager.fla
med følgende as:
var person1:Person = Person("Ole",28); var person2:Person = Person("Hans",31); trace(person1.getName()+" er venner med "+person2.getName()+"som er "+person2.getAge()+" år gammel");
Så returnerer den "Ole er venner med Hans som er 31 år gammel".
Men hvordan kan dette benyttes i denne sammenhæng? Kan du ikke på et tidspunkt generere en kode, som virker lige som ovenstående, men med nogle classes, så jeg kan se, hvordan de ellers kan benyttes, da jeg måske ikke helt er alt for bekændt med dem endnu?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.