Volledige versie bekijken : RPG muren
Lenn
%Europe/Berlin %419 %2005, 10:04
Ik ben bezig met een RPG game te maken maar ik zit nog met het volgende probleem: de muren.
Het lukt me om niet door de muren te lopen maar als ik dezelfde muren kopieer om ergens anders te plaatsen, dan loopt hij nog steeds enkel en alleen door de originele muren. Ik heb de 4 muren (links, rechts, onder, boven) telkens apart, dit vond ik het eenvoudigst
Dit is het deel van het script op het karakter dat je bestuurd:
//linker muur
if (this.hitTest(_root.wallL)) {
this._x = this._x-5;
walkspd=-1
point.x = 0;
point.y = 100;
}
//rechter muur
if (this.hitTest(_root.wallR)) {
this._x = this._x+5;
walkspd=-1
point.x = 0;
point.y = 100;
}
//bovenste muur
if (this.hitTest(_root.wallU)) {
this._y = this._y-5;
walkspd=-1
point.x = 0;
point.y = 100;
}
//onderste muur
if (this.hitTest(_root.wallD)) {
this._y = this._y+5;
walkspd=-1
point.x = 0;
point.y = 100;
}
Ik kan moeilijk voor elke (linker, rechter, bovenste en onderste) muur beginnen nummer in de instance name en dan hetzelfde doen in het script, ik zou kilometers script krijgen op die manier!
Ik hoop dat ik hier een oplossing vind!
Groeten Lenn
Fatty Owl
%Europe/Berlin %450 %2005, 10:48
je kan het met een for loop doen (of je moet tilebased gaan werken).
Nu moet je wel elke muur een aparte instance geven.
Horizontale muren: Hwall1, Hwall2, Hwall3,...
Verticale muren: Vwall1, Vwall2, Vwall3,...
Ook moet je bij AantalVmuren het aantal verticale muren invullen en bij AantalHmuren het aantal horizontale muren.
Ik heb de instance van je poppetje hero genoemt verander die maar naar het juiste.
(ik heb dit niet getest ;))
AantalHMuren = 2;
AantalVmuren = 2;
for (i=0; i<AantalHMuren; i++) {
HWall[i].onEnterFrame = function() {
if (this.hitTest(_root.hero)) {
if (_root.hero._x<this._x) {
this._x -= 5;
}
if (_root.hero._x>this._x) {
this._x += 5;
}
walkspd = -1;
point._x = 0;
point._y = 100;
}
};
}
for (i=0; i<AantalVMuren; i++) {
VWall[i].onEnterFrame = function() {
if (this.hitTest(_root.hero)) {
if (_root.hero._y<this._y) {
this._y -= 5;
}
if (_root.hero._y>this._y) {
this._y += 5;
}
walkspd = -1;
point._x = 0;
point._y = 100;
}
};
}
Lenn
%Europe/Berlin %485 %2005, 11:38
Dit is ongeveer wat ik nodig heb maar het is nog niet compleet ;) mss dat je me nog wat kan helpen...
Dit script is voor een rpg waar de achtergrond beweegt en de hero in het midden blijft zeker? zo lijkt het toch :)
Bij mij is het de hero die rondloopt en de achtergrond staat stil, het script moet dus op de hero zelf komen. Ik heb er wat aan gesleuteld maar het blijkt niet te werken. Weet jij hoe het dan precies moet?
stel er zijn 4 horizontale muren: HWall1, HWall2, HWall3, HWall4
en 4 verticale muren: VWall1, VWall2, VWall3, VWall4
Lenn
SaphuA
%Europe/Berlin %491 %2005, 11:47
...
Hmmm.. dit lijkt me niet de beste manier, aangezien je nu voor elke muur een apparte onEnterFrame maakt. Edit: En zo te zien verplaats je de muren bij een hitTest, en niet de hero zelf ;)
De code die je gebruikt in je eerste post zou moeten werken, je zult waarsch iets verkeerd doen met de instance namen? En waar zijn die point.x en point.y voor? Worden die niet gebruikt in de positie van de hero?
Maar even tussendoor, ik neem aan dat de MC's een soort rechthoekig frame om de hero maken, niet? Waarom gebruik je dan niet de volgende methode?
var moveS = 8;
var edge = {minX:20, minY:20, maxX:530, maxY:380};
this.onEnterFrame = function() {
if (Key.isDown(Key.LEFT)) {
hero._x -= moveS;
if (hero._x<edge.minX) {
hero._x = edge.minX;
}
} else if (Key.isDown(Key.RIGHT)) {
hero._x += moveS;
if (hero._x>edge.maxX) {
hero._x = edge.maxX;
}
} else if (Key.isDown(Key.DOWN)) {
hero._y += moveS;
if (hero._y>edge.maxY) {
hero._y = edge.maxY;
}
} else if (Key.isDown(Key.UP)) {
hero._y -= moveS;
if (hero._y<edge.minY) {
hero._y = edge.minY;
}
}
};
Lenn
%Europe/Berlin %499 %2005, 11:58
Nee, het zit anders in elkaar, de mc's zijn de muren die bv rond huisjes en bomen staan en onderandere ook aan de buitenkant van de swf zodat hij niet uit de rand kan lopen. En het script dat ik in het begin hier postte werkt wel hoor, maar er is een probleem en dat zie je hier:
Ik heb het systeem van de volgende link gehaald:
http://flashmove.com/forum/archive/index.php/t-6596
Kijk naar de 3 laatste posts op die pagina, de voorlaatste post legt ook meteen het probleem uit waar ik ook mee zit...
Om het hier nog even in het kort uit te leggen:
De hero loopt bv. niet door de mc 'Wall', dat is in orde.
Nu wil je die muur gewoon kopieren om hem opnieuw te gebruiken dus je hebt een 2de mc 'Wall' maar daar pakt het niet meer op.. het werkt enkel op de originele muur,
niet op de gekopieerde muur.
Lenn
SaphuA
%Europe/Berlin %512 %2005, 12:17
De reden dat het niet meer werkt is omdat er maar 1MC mag zijn voor elke instance naam, omdat jij er twee gebruikt werkt die andere niet.
Maar dit maakt de zaak iets ingewikkelder. Als ik jou was zal ik het toch anders aanpakken. Ik heb even een snel voorbeeld in elkaar gezet, hoewel het ver van perfect is. Het werkt zo;
Hij zoekt de randen van de hero MC met het getBounds command. Dit creërd een object met die waardes. Nadat je de hero verplaatst hebt kijkt hij naar de hoeken van de hero of deze de grond raken, als dit het geval is wordt hij terug geplaatst.
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.