PDA

Volledige versie bekijken : Duwen van object


Unmortal
%Europe/Berlin %695 %2007, 16:41
Hallo mensen,

Ik zit met een probleempje,
Ik ben op dit moment bezig een soort sokoban te maken in flash 8pro.
Key movement en hittest met muren is me gelukt.
Nu moet ik nog een object kunnen duwen,
dit is me tot zover gelukt MAAR als ik het object via de _y as duw is het geen probleem, de box blijft netjes op zijn as (ik link de script zo) maar als ik via de _x as duw pakt ie de berekening van de _y as mee.

onClipEvent (enterFrame) {
if (hitTest(_root.hero)) {
var getY = (_y-_root.hero._y);
_y += getY;
}
if (hitTest(_root.hero)) {
var getX = (_x-_root.hero._x);
_x += getX;
}
}

hero is hier het duwende object en deze script zit OP het object wat geduwd hoort te worden.

Ik heb dit omgedraaid gehad, maar dan krijgt de _y as het zelfde probleem.
Heb de "else if" statement gebruikt maar dan werkt de code van de as waar dit aan zit en werkt ook niet.
Helaas ken ik geen verdere codes waarmee ik het wel kan doen en nu hoop ik dus op een reactie
Mocht mijn code verder beter kunnen hoor ik het erg graag. Alvast bedankt voor het iig lezen van deze lap tekst ;)

Groeten PJ

Jan
%Europe/Berlin %718 %2007, 17:14
Je zou deze:
var getX = (_x-_root.hero._x);
_x += getX; kunnen koppelen aan je 'key movement'.
if(hitTest(_root.hero) && (Key.isDown (Key.RIGHT)||Key.isDown (Key.LEFT))){
//enkel horizontaal bewegen
}
//idem voor UP en DOWN

Je script ook beter in een frame op een aparte layer.

Jan

Unmortal
%Europe/Berlin %723 %2007, 17:22
Dank je wel, ga het direct proberen...
[Edit]
Bij nader inzien kom ik er niet precies uit van wat je nu eigenlijk daar mee bedoelt.
Dit is mijn movement code:
onClipEvent (enterFrame) {
var speed = 5;
if (Key.isDown(Key.UP)) {
this._y -= speed;
}
if (Key.isDown(Key.DOWN)) {
this._y += speed;
}
if (Key.isDown(Key.LEFT)) {
this._x -= speed;
}
if (Key.isDown(Key.RIGHT)) {
this._x += speed;
}
}

Deze code zit op het duwende object.
Sorry, maar ik ben nog niet droog achter mijn flash.actionscript.oren. Begin het nu net een beetje te begrijpen. Vooral de dingen waar ik mee bezig ben geweest zoals dus movement en hittest kan ik herkennen maar de diverse toepassingen en of verbeteringen ken ik nog niet.

Groetjes PJ

Unmortal
%Europe/Berlin %590 %2007, 14:10
Hallo mensen,

Ik zit met een probleempje,
Ik ben op dit moment bezig een soort sokoban te maken in flash 8pro.
Key movement en hittest met muren is me gelukt.
Nu moet ik nog een object kunnen duwen,
dit is me tot zover gelukt MAAR als ik het object via de _y as duw is het geen probleem, de box blijft netjes op zijn as (ik link de script zo) maar als ik via de _x as duw pakt ie de berekening van de _y as mee.

onClipEvent (enterFrame) {
if (hitTest(_root.hero)) {
var getY = (_y-_root.hero._y);
_y += getY;
}
if (hitTest(_root.hero)) {
var getX = (_x-_root.hero._x);
_x += getX;
}
}

hero is hier het duwende object en deze script zit OP het object wat geduwd hoort te worden.

Ik heb dit omgedraaid gehad, maar dan krijgt de _y as het zelfde probleem.
Heb de "else if" statement gebruikt maar dan werkt de code van de as waar dit aan zit en werkt ook niet.
Helaas ken ik geen verdere codes waarmee ik het wel kan doen en nu hoop ik dus op een reactie
Mocht mijn code verder beter kunnen hoor ik het erg graag. Alvast bedankt voor het iig lezen van deze lap tekst ;)

Groeten PJ

Jan
%Europe/Berlin %702 %2007, 16:51
Hier is een voorbeeldje:
http://users.telenet.be/jansurf/duwen/duwen.html
http://users.telenet.be/jansurf/duwen/duwen.fla

Groeten,
Jan

Unmortal
%Europe/Berlin %730 %2007, 17:31
Dank je wel voor je moeite Jan.
Ik hoop/ga er vanuit dat ik het hiermee red.
50 in de zwarte vierkanten staat voor de maat toch?
zoals mijn objecten zijn 20 dus dan moet ik daar 20 van maken.
_parent gaat naar de hoofdscene?

Nogmaals bedankt,
Groeten PJ

Jan
%Europe/Berlin %744 %2007, 17:52
50 in de zwarte vierkanten staat voor de maat toch?
zoals mijn objecten zijn 20 dus dan moet ik daar 20 van maken.
_parent gaat naar de hoofdscene?


_parent gaat 1 niveau hoger (in dit geval had ik er ook _root van kunnen maken)
Verder zijn de afmetingen nogal "hard coded", geef ik toe, 'k wilde gewoon snel een simpel voorbeeldje maken. Je kan er ook this._width van maken.
En bij de start moet het rode blokje en alle zwarte blokjes op een (x,y)-coordinaat staan dat een veelvoud van 5 is (speed=5) want anders komt het niet uit. Ook dit kan je relatief maken maar ik weet niet of dat noodzakelijk is in jouw geval en het zou het voorbeeld misschien nodeloos ingewikkeld/minder (makkelijk) begrijpbaar maken.
En bij de start van je sokoban heb je volgens mij toch 'vaste' coordinaten en niet 'halve' dus dan maakt het niet zoveel uit en kan je het simpel houden.

Groeten,
Jan