PDA

Volledige versie bekijken : hittest


ottorocket
%Europe/Berlin %609 %2006, 15:37
Ik zet deze code op elk van mijn gebouw in de movieclip van mijn achtergrond.

Maar het werkt niet, ik weet niet hoe ik moet verwijzen naar mijn tank. De tank staat gewoon op de scene, building_1 staat in de movieclip van "achtergrond", of kan ik de code gewoon bij mijn tank bijzetten en al mijn gebouwen dezelfde instance naam geven?
Hoe zouden jullie het doen?

onClipEvent (enterFrame) {
if (tank.hitTest(_root.building_1)) {
_root.building_1._alpha = 50;
} else {
_root.building_1._alpha = 100;
}
}

nahkranoth
%Europe/Berlin %630 %2006, 16:08
Dit moet werken als t goed is, maar de tank movieclip moet wel de instancenaam "tank" hebben.
(De code gewoon op elk gebouw neerzetten)

onClipEvent (enterFrame) {
if (this.hitTest(_root.tank)) {
this._alpha = 50;
} else {
this._alpha = 100;
}
}

ottorocket
%Europe/Berlin %678 %2006, 17:17
bedankt, het werkt,
maar hoe kan ik nu als ik tegen het huisje rij de snelheid van mijn tank naar 0 laten gaan??
Dus mijn opstelling
Je hebt mijn tank op de scene, op die scene staat ook mijn background MC, in die MC staan al mijn huizen.

In de movement code van mijn tank heb ik vanboven gezet
snelheid = 1;

dus als ik het huis met mijn tank raak zou het moeten worden
snelheid = 0;

maar dan is het probleem dat mijn tank niet meer kan wegrijden van het gebouw omdat hij daartegen staat

ottorocket
%Europe/Berlin %841 %2006, 21:11
iemand een idee?

Erwinzzz
%Europe/Berlin %967 %2006, 00:13
snelheid *=-1;

Dat stuitert ie er van af :P
Dan moet je er wel voor zorgen dat de snelheid geen constante waarde heeft. Ik bedoel dat waneer je bijvoorbeeld link ingedrukt is dat dan niet de x waarde telkens bijvoorbeeld 5 toeneemd, maar dat dan de snelheid 1 toeneemd, en bij een snelheid van 5 hij niet meer verhoogd. En de _x waarde is dan dus + snelheid. als je begrijpt wat ik bedoel..

dus: ipv:

if(Key.isDown(Key.LEFT)){
snelheid=5;
}

Moet je dit gebruiken:

snelheid=0;
instancename.onEnterFrame = function(){
if(Key.isDown(Key.LEFT)){
snelheid-=1;
}
if(snelheid<-5){
snelheid = -5;
}
if(snelheid>5){
snelheid =5;
}
if(this.hitTest(muur){
snelheid*=-1;
}
}

ottorocket
%Europe/Berlin %977 %2006, 00:27
ik heb dit maar het werkt niet

stop();
snelheid = 0;
loop.onEnterFrame = function() {
// bewegen
_root.loop._x = _root.tank._x;
_root.loop._y = _root.tank._y;
// draaien
x = _root._xmouse-_root.loop._x;
y = _root._ymouse-_root.loop._y;
angle = Math.atan(y/x)/(Math.PI/180);
if (x<0) {
angle += 180;
}
if (x>=0 && y<0) {
angle += 360;
}
_root.loop._rotation = angle+90;
};
tank.onEnterFrame = function() {
if (Key.isDown(Key.UP)) {
speed += 1;
}
if (Key.isDown(Key.DOWN)) {
speed -= 1;
}
if (snelheid<-5) {
snelheid = -5;
}
if (snelheid>5) {
snelheid = 5;
}
if (this.hitTest(background.gebouw)) {
snelheid *= -1;
}
if (Key.isDown(Key.LEFT)) {
this._rotation -= 10;
}
if (Key.isDown(Key.RIGHT)) {
this._rotation += 10;
}
speed *= .95;
_root.background._x += Math.sin(this._rotation*(Math.PI/180))*speed;
_root.background._y += Math.cos(this._rotation*(Math.PI/180))*speed*-1;
loop._x = tank._x;
loop._y = tank._y;
};


En de instance name is goed

Erwinzzz
%Europe/Berlin %468 %2006, 12:15
Ik zie et al: onderin stond nog speed.. maar boven in snelheid. de output van snelheid was waarschijnlijk wel goed , maar er werd niets mee gedaan...

stop();
snelheid = 0;
loop.onEnterFrame = function() {
// bewegen
_root.loop._x = _root.tank._x;
_root.loop._y = _root.tank._y;
// draaien
x = _root._xmouse-_root.loop._x;
y = _root._ymouse-_root.loop._y;
angle = Math.atan(y/x)/(Math.PI/180);
if (x<0) {
angle += 180;
}
if (x>=0 && y<0) {
angle += 360;
}
_root.loop._rotation = angle+90;
};
tank.onEnterFrame = function() {
if (Key.isDown(Key.UP)) {
speed += 1;
}
if (Key.isDown(Key.DOWN)) {
speed -= 1;
}
if (snelheid<-5) {
snelheid = -5;
}
if (snelheid>5) {
snelheid = 5;
}
if (this.hitTest(background.gebouw)) {
snelheid *= -1;
}
if (Key.isDown(Key.LEFT)) {
this._rotation -= 10;
}
if (Key.isDown(Key.RIGHT)) {
this._rotation += 10;
}
snelheid *= .95;
_root.background._x += Math.sin(this._rotation*(Math.PI/180))*snelheid;
_root.background._y += Math.cos(this._rotation*(Math.PI/180))*snelheid*-1;
loop._x = tank._x;
loop._y = tank._y;
};

ottorocket
%Europe/Berlin %506 %2006, 13:09
ok, ik moest nog 2 keer speed veranderen in snelheid en toen ging het

maar dit werkt maar bij 1 gebouw, ik heb er 2 ik heb ze allebij de instance naam "gebouw" gegeven

Erwinzzz
%Europe/Berlin %516 %2006, 13:24
of er zit een fout in jouw flash. maar je kan niet 2 dingen dezelfde instance name geven. je moet er gewoon 2 aparte hittest van maken...

if (this.hitTest(background.gebouw1)) {
snelheid *= -1;
}
if (this.hitTest(background.gebouw2)) {
snelheid *= -1;
}

ottorocket
%Europe/Berlin %517 %2006, 13:25
ok, dat zal dan wel een hele lange code worden als je veel gebouwen hebt

Erwinzzz
%Europe/Berlin %528 %2006, 13:41
das waar, daar zat ik ff over te denken, zou je ff willen checken of deze code ook werkt voor de hittest:

if (this.hitTest(background.gebouw1) or this.hitTest(background.gebouw2)) {
snelheid *= -1;
}

ottorocket
%Europe/Berlin %567 %2006, 14:37
ja die werkt ook

Erwinzzz
%Europe/Berlin %635 %2006, 16:15
aaah nou zo kan et dus ook :p