Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-11-2011, 17:53   #1 (permalink)
Neuer User
 
Registriert seit: May 2002
Ort: giessen
Beiträge: 51
sanfte kamerabewegung

hi
hänge gerade an einem kleinem 2D Game dran, wo sich der Charakter immer in der Mitte des Bildes befinden soll. Da sich der Charakter recht ruckartig bewegt, würde ich gerne die Kamera saft hinterher schwenken lassen. Am liebsten würde ich das ganze per easeInOut lösen, das Problem ist nur, dass sich der Charakter immer bewegt und ich kein festen Zielwert für x und y habe.



Hab bisher diese 2 Sachen probiert.
Das ganze Level inkl. Charakter befindet sich in einem Container, welchen ich bewege um die Kamerabewegung zu erzeugen.

Habe bisher zwei Sachen probiert um das ganze zum laufen zu bringen.
Versuch1:
Ich hatte eine Variable für den momentanen Speed der Kamera(level Containers). Sobald der Character sich von dem Mittelpunkt des Screens entfernt hat, wurde der speed erhöht(+1/-1) bis der Charakter in der Mitte des Screens war. Sobald er diesen erreicht hat, wurde der Speed wieder verringert. Problem ist aber, dass der Speed erst verringert wird sobald der Charakter in der Mitte des Screens ist d. h. die Kamera fährt noch etwas weiter über ihr ziel hinaus. Davon ab ist die lineare Bewegung durch das +1/-1 nicht so schön.

Versuch2:
die Differenz von Charakter und Bildschirmmitte *0.3
Dadurch ist der Charakter immer schön in der Mitte des Bildes und die Kamera bremst schön ab sobald sie näher zum Charakter hin kommt.
Blöd ist nur, dass es keine weiche Beschleunigung gibt.



Hat jemand eine Idee wie ich das besser berechnen könnte um eine sanfte Beschleunigung und Abbremsung zu haben?
__________________
www.cral.de
RaeLL ist offline   Mit Zitat antworten
Alt 05-11-2011, 16:08   #2 (permalink)
i ate pixels
 
Benutzerbild von pixelslave
 
Registriert seit: Mar 2004
Ort: Augsburg
Beiträge: 528
Kannst du uns was zeigen? Muss das sehen bevor ich dazu was sagen kann ;-)
pixelslave ist offline   Mit Zitat antworten
Alt 05-11-2011, 22:44   #3 (permalink)
Neuer User
 
Benutzerbild von andrelehnert
 
Registriert seit: Oct 2007
Ort: Kölle
Beiträge: 1.232
kleines Bsp mit ENTER_FRAME
Man kann alternativ auch mit ner TweenEngine arbeiten...

ABer wie pixelslave schon schrieb - mehr beschreibung Deines konkreten Aufbaus wär vonnöten.

PHP-Code:
var world:Sprite = new Sprite();
var 
avatar:Sprite = new Sprite();
var 
xOffset:Number stage.stageWidth/2;
var 
yOffset:Number stage.stageHeight/2;


var 
stepSize:int=30;
var 
camSpeed:Number=.1;

function 
iniWorld():void{
    var 
g:Graphics world.graphics;
    
g.beginFill(0x00aa00);
    
g.drawRect(0,0,2000,2000);
    for (var 
i:int 0;i<40;i++){
        
g.beginFill(Math.random()*0xFFFFFF)
        
g.drawRect(Math.random()*2000,Math.random()*2000,Math.random()*150,Math.random()*150)
    }
    
    
addChild(world)
}
function 
iniAvatar():void{
    var 
g:Graphics avatar.graphics;
    
g.beginFill(0xaadd11);
    
g.drawCircle(0,0,40);
    
g.beginFill(0x0000aa);
    
g.drawCircle(-18,-15,6);
    
g.drawCircle(18,-15,6);    
    
g.endFill();
    
    
g.lineStyle(4,0xcc0000);
    
g.moveTo(-25,5);    
    
g.curveTo(5,25,25,5);
    
g.moveTo(-25,5);
    
g.beginFill(0x770000);        
    
g.curveTo(5,40,25,5);
    
avatar.xOffset;
    
avatar.stage.stageHeight/2;
    
    
world.addChild(avatar)
}

function 
iniKeyboard():void{
    
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);        
}
function 
keyDownHandler(event:KeyboardEvent):void
        
{                //trace(event.keyCode)
        
switch (event.keyCode){
                    
                    case 
38//hoch
                        
avatar.y-=stepSize;
                    break;
                    case 
40://runter
                        
avatar.y+=stepSize;
                    break;
                    case 
37:  //links
                        
avatar.x-=stepSize;
                    break;
                    case 
39://rechts
                        
avatar.x+=stepSize;
                    break;
                    
        }
        
startupdateWorldPosition();
}
function 
startupdateWorldPosition():void{
    if (
hasEventListener(Event.ENTER_FRAME))removeEventListener(Event.ENTER_FRAMEupdateWorldPosition);
    
addEventListener(Event.ENTER_FRAMEupdateWorldPosition);
}

function 
updateWorldPosition(e:Event):void{
    var 
deltaX:Number = (world.xOffset avatar.x)*camSpeed;
    var 
deltaY:Number = (world.yOffset avatar.y)*camSpeed;
    
world.-= deltaX;
    
world.-= deltaY;
    if ( 
deltaX<camSpeed && deltaX>-camSpeed && deltaY<camSpeed && deltaY>-camSpeed ) {
        
removeEventListener(Event.ENTER_FRAMEupdateWorldPosition);        
    };
}
iniWorld();
iniAvatar();
iniKeyboard(); 
LG ANdré
Angehängte Dateien
Dateityp: swf game_basic.swf (1,7 KB, 17x aufgerufen)
__________________
Die Hoffnung stirbt zuletzt.
Aber sie stirbt.
andrelehnert ist gerade online   Mit Zitat antworten
Alt 09-11-2011, 20:49   #4 (permalink)
Neuer User
 
Registriert seit: May 2002
Ort: giessen
Beiträge: 51
Sorry, dass ich jetzt erst antworte. dachte ich hätte den Thread abonniert und auf email gewartet. hatte ich aber nicht

Danke für die mühe schon mal.

Um ehrlich zu sein mache ich das ganze nicht in Flash sondern in Lua. Funktioniert aber vom Prinzip her genauso. Mir gehts es auch nur um die Berechnung.

Hab es bei mir sogar schon so wie bei dir im Beispiel andre.
Aber der Code zeigt auch ganz gut mein Problem. Wenn man die stepSize auf 800 stellt dann sieht man, dass die Geschwindigkeit erst schnell ist und dann immer langsamer wird.
Ich hätte aber gerne, dass sie erst schneller wird, bis etwa der Hälfte von delta und dann wieder langsamer.

Muss man sowas mit if's machen oder gibts da einen eleganteren Weg?
__________________
www.cral.de
RaeLL ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
sanfte bewegung - frame überblendung tommycush Flash Einsteiger 1 03-10-2006 23:13
sanfte animation bei buttons hp_deluxe Flash 4 und Flash 5 2 26-09-2001 21:48


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele