| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Sep 2009
Beiträge: 8
| Schützenwettbewerb
Hallo zusammen, ich möchte ein kleines Flashgame programmieren, in dem es um einen Schießwettbewerb geht. Um das ganze nicht zu einfach zu machen, sollte der Cursor eine natürliche Unruhebewegung machen. Könnt ihr mir sagen wie ich diese Bewegung implementiere? Gruß, |
| | |
| | #2 (permalink) |
| Nix Wisser Registriert seit: May 2003 Ort: Würzburg, Kleinstadt
Beiträge: 3.510
| ![]() da hab ich was aus der Mottenkiste mit Wind und Bier und Tralala Berechnung eines Treffers kannst dir ja auch das ganze Thema mal durchlesen
__________________ nullidee Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR® |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Sep 2009
Beiträge: 8
|
Vielen Dank für den Link, hat mich schon ein ganzes Stück weitergebracht. Leider handelt es sich bei meinem Schützenwettbewerb nicht um klassisches Zielscheiben schießen. Die Zielscheibe ist eine Holzfigur der man in dem Spiel 5 Hauptpreise herabschießen kann. Herz, Krone, Zepter, etc.. Nun habe ich den Torso der Figur (ohne die Hauptpreise) in den HG gelegt. Das treffen bspw. des Herzens habe ich einfach in einem neuen MC animiert. Den Bereich habe ich einfach über die Pixelabmessungen abgebildet: (siehe auch oberes Programm) Code: if ((obj._x > -5 & obj._x < 5)&&(obj._y > -5 & obj._y < 5)) {
_root.apfel.gotoAndPlay(2);
tf2.text ="Herz";
treffer = 100;
} Leider wird der Film nich abgespielt. Was habe ich falsch gemacht? Und: Die Pixeldefinition wie oben ist sehr ungenau und alles andere als Herzförmig. Wie kann ich das besser lösen? Evtl. einen unsichtbaren Button genau in dieser Form drüberlegen? Danke für die Antworten. Gruß |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Sep 2009
Beiträge: 8
|
Wie gesagt, habe nur das eine script etwas modifiziert. Vieles davon wird nicht benötigt. Hier trotzdem mal die Scripte: Code: mcp = MovieClip.prototype;
mcp.drawCircle = function (x, y, r) {
this.moveTo (x+r, y);
this.curveTo (r+x, 0.4142*r+y, 0.7071*r+x, 0.7071*r+y);
this.curveTo (0.4142*r+x, r+y, x, r+y);
this.curveTo (-0.4142*r+x, r+y, -0.7071*r+x, 0.7071*r+y);
this.curveTo (-r+x, 0.4142*r+y, -r+x, y);
this.curveTo (-r+x, -0.4142*r+y, -0.7071*r+x, -0.7071*r+y);
this.curveTo (-0.4142*r+x, -r+y, x, -r+y);
this.curveTo (0.4142*r+x, -r+y, 0.7071*r+x, -0.7071*r+y);
this.curveTo (r+x, -0.4142*r+y, r+x, y);
};
Stage.scaleMode = "noScale";
dist = function(x1, y1, x2, y2){
return (Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
};
Mouse.hide();
mcp.create_scheibe = function(x,y,ra,ringe){
loch_diff = 1;//Einschusslochradius
var tf = this.createTextField("tf",9000,0,20,200,100);
var tf2 = this.createTextField("tf2",9001,0,80,200,100);
var cursor_mc = this.createEmptyMovieClip("cursor_mc",10000);
with(cursor_mc){
beginFill(0x444444,100);
drawRec(0,0,20,20);
drawRec(0,0,18,18);
beginFill(0xFFFFFF,50);
drawRec(0,0,18,18);
beginFill(0x444444,100);
drawCircle(0,0,9);
drawCircle(0,0,8);
drawCircle(0,0,4);
drawCircle(0,0,3);
_x = _xmouse;
_y = _ymouse;
}
farben = [0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x444444,0x444444,0x444444,0x444444,0xFFFFFF,0xFFFFFF,0xFFFFFF];
farben_rand = [0x444444,0x444444,0x444444,0x444444,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x444444,0x444444,0x444444];
abstand = (ra*2)/((ringe*2)+1);
this.createEmptyMovieClip("scheibe",1);
checker = [];
for (var i=0;i<=ringe;i++){
checker[i] = ra-(abstand*i);
var mc = this.scheibe.createEmptyMovieClip("ring"+i,i);
mc.beginFill(farben_rand[i],100);
mc.drawCircle(0,0,ra-(abstand*i));
mc.beginFill(farben[i],100);
mc.drawCircle(0,0,(ra-(abstand*i))-1);
if(i<ringe){
mc.createTextField("tfl",1,0,0,0,0);
mc.createTextField("tfr",2,0,0,0,0);
mc.createTextField("tfo",3,0,0,0,0);
mc.createTextField("tfu",4,0,0,0,0);
mf = new TextFormat();
mf.font = "Arial";
mf.size = 10;
mc.tfl.autoSize = true;
mc.tfl.selectable = false;
mc.tfl.text = i+1;
mc.tfl.setTextFormat(mf);
mc.tfl.textColor = farben_rand[i];
mc.tfl._x = -Math.round((mc._width/2)-(abstand/2)+mc.tfl.textWidth/2)-1;
mc.tfl._y = -Math.round(mc.tfl._height/2);
mc.tfr.autoSize = true;
mc.tfr.selectable = false;
mc.tfr.text = i+1;
mc.tfr.setTextFormat(mf);
mc.tfr.textColor = farben_rand[i];
mc.tfr._x = Math.round((mc._width/2)-(abstand/2)-mc.tfr.textWidth/2)-2;
mc.tfr._y = -Math.round(mc.tfr._height/2);
mc.tfo.autoSize = true;
mc.tfo.selectable = false;
mc.tfo.text = i+1;
mc.tfo.setTextFormat(mf);
mc.tfo.textColor = farben_rand[i];
mc.tfo._x = -mc.tfo._width/2;
mc.tfo._y = -Math.round((mc._height/2)-(abstand/2)+mc.tfo.textHeight/2)-1;
mc.tfu.autoSize = true;
mc.tfu.selectable = false;
mc.tfu.text = i+1;
mc.tfu.setTextFormat(mf);
mc.tfu.textColor = farben_rand[i];
mc.tfu._x = -mc.tfo._width/2;
mc.tfu._y = Math.round((mc._height/2)-(abstand/2)-mc.tfu.textHeight/2)-1;
}
}
this.scheibe._x = x;
this.scheibe._y = y;
start_x = x;
start_y = y;
};
check = function (obj) {
diff = dist(start_x, start_y, obj._x, obj._y)-loch_diff;
tf.text = "";
tf.text=" " + obj._x;
ringe = checker.length;
i = 0;
treffer = 0;
for(var i=0;i<ringe;i++){
/*Ton abspielen*/
schuss = new Sound();
schuss.attachSound("blub.wav");
schuss.start();
/*
if (diff<checker[i-1] && diff>checker[i]){
tf2.text = i + " getroffen";
treffer = i;
}
if (diff>checker[0]){
tf2.text = " daneben!: ";
}
if (diff<checker[i]){
tf2.text = "10+ getroffen";
treffer = 20;
}
*/
//Zepter
if ((obj._x > -5 & obj._x < 5)&&(obj._y > -5 & obj._y < 5)) {
tf2.text ="Zepter"
treffer = 100;
}
//Reichsapfel
if ((obj._x > -5 & obj._x < 5)&&(obj._y > -5 & obj._y < 5)) {
tf2.text ="Reichsapfel";
treffer = 100;
}
}
counter = counter+treffer;
tf.text = counter;
};
this.onEnterFrame = function(){
if (Key.isDown(40)) {
bier--;
if(bier<0) bier = 0;
}
if (Key.isDown(38)) bier++;
if (Key.isDown(37)) wind--;
if (Key.isDown(39)) wind++;
bier_intus = Math.round(random(bier)/10);
if(wind>0){
richtung = "von links";
}
else{
richtung = "von rechts";
}
tf.text = "Wind "+ wind/10 +" m/h " + richtung;
cursor_mc._x += (_xmouse-cursor_mc._x)/4 + bier_intus;
cursor_mc._y += (_ymouse-cursor_mc._y)/4 + bier_intus;
lauf._rotation = Math.atan2(cursor_mc._x-lauf._x, lauf._y-cursor_mc._y)*180/Math.PI;
updateAfterEvent();
};
this.onMouseDown = function(){
count++;
var was = this.createEmptyMovieClip("loch_mc"+count,100+count);
was.beginFill(0xb08585,100);
was.drawCircle(0,0,(loch_diff+1));
was.beginFill(0x000000,100);
was.drawCircle(0,0,loch_diff);
was._x = cursor_mc._x + wind;
was._y = cursor_mc._y;
check(was);
};
count = 0;
counter = 0;
tf.text = counter;
//-------------
//Scheibe bei x = 400, y = 260, Radius 150 px, 11 Ringe
//-------------
this.create_scheibe(400,260,150,10);
lauf._x = scheibe._x;
lauf._y = 620;
bier = 70;
if(Math.random() < 0,5){
vz = -1;
}
else {
vz = 1;
}
wind = Math.round((Math.random()*10))*vz; //10; Außerdem habe ich jetzt eine unsichtbare Schaltfläche in der benötigten Form darüber gelegt mit folgendem script: Code: on(press) {
apfel.gotoAndPlay(2);
} Leider wird dieser MC eben nicht abgespielt... |
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Sep 2009
Beiträge: 8
|
Was meinst du denn genau mit objekten in der FLA? Momentan habe ich auf der HZL vier Ebenen mit jeweils einem Schlüsselbild. Eine mit dem HG Eine mit dem langen Hauptscript (s.o.) Eine mit dem Movieclip, in der der fallende Apfel annimiert ist Eine mit der transparenten Schaltfläche über dem Apfel |
| | |
| | #8 (permalink) |
| Nix Wisser Registriert seit: May 2003 Ort: Würzburg, Kleinstadt
Beiträge: 3.510
|
wenn du schon eine Antwort auf deine Frage willst wäre es sehr freundlich eine .fla zu zeigen damit man mal schauen kann. Aber wenn möglich Flash8 - wenn nicht möglich reicht auch eine .swf
__________________ nullidee Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR® |
| | |
| | #13 (permalink) |
| Nix Wisser Registriert seit: May 2003 Ort: Würzburg, Kleinstadt
Beiträge: 3.510
|
ist natürlich Blödsinn das Script für deine Art des Schießwettbewerbs zu verwenden. Da ist besser das ganze neu zu machen. Im Prinzip brauchst nur das attachen des Schusslochs an _xmouse/_ymouse und dann eine hitTestabfrage.
__________________ nullidee Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR® |
| | |
| | #15 (permalink) |
| Neuer User Registriert seit: Sep 2009
Beiträge: 8
|
Abgefahren! Vielen Dank für eure Mühen! Habe das Schussloch noch etwas modifiziert. Leider funktioniert jetzt die kollisionsabfrage nicht mehr so wies eigentlich tun sollte. Das Ziel wird äußerst selten getroffen, ich glaube wenn ich genau ein bestimmtes Pixel treffe, also irgendwann mal nach 20-30 Versuchen. Woran liegt das? Zum Hintergrund. Bei dem Schießen handelt es sich nicht um irgendeine Lasergun, wie der Sound vermuten lässt (hatte nichts besseres zum ausprobieren), sondern um ein Armbrustschießen, das es tatsächlich gibt. Man schießt mit Bolzen auf einen Adler aus Holz. Sprich die Teile sollten getroffen sein, wenn die Spitze (also der Mittelpunkt des "Schusslochs") innerhalb des MC liegt. Außerdem: Wo mache ich die Fallunterscheidung zwischen Apfel, Herz, Krone, etc.? Im Moment ist "was = apfel" definiert? Geändert von guru85 (23-09-2009 um 17:58 Uhr) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |