나는 물체를 던져서 시작점과 끝 지점을 기준으로 물체가 움직이는 각도와 속도를 만들려고합니다. 지금까지 객체를 드래그하면서 터치 포인트를 추적 할 수있었습니다 mySprite
. 또한 물체를 놓을 때 정적 인 중력을 가지고 있습니다. 그러나 두 가지를 서로 연결하는 방법을 찾는 데 어려움을 겪고 있습니다.터치를 시작하고 속도를 결정하기 위해 터치 포인트를 끝내기 AS3
나는 객체가 언제 풀려나는지 감지하고 중력이 시작되는 곳을 감지하는 함수 onTouchEnd()
이 있습니다.하지만 지금 아무 일도 일어나지 않습니다.
시작점과 종료점을 정확히 찾아 내고 두 점 사이의 각도를 객체의 궤도에 저장할 수 없으면 어떻게됩니까? 그런 멍청한 놈 한테 미안해.
편집 : 한 localX를 사용하여 업데이트 코드 및 localY 단지 x 값을 사용하여 각도를 계산
package {
import flash.display.MovieClip;
import flash.events.*;
import flash.ui.Multitouch;
import flash.ui.MultitouchInputMode;
import flash.display.Sprite;
public class ThrowIt extends MovieClip{
public var bg:Sprite = new Sprite();
public var mySprite:Sprite = new Sprite();
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
public var startX:int;
public var endX:int;
public var startY:int;
public var endY:int;
public var angle:int;
//public var speed:Number = 10; //this will change based on mouse speed
public var moving:Number = 0;
public var speedLimit:Number = 35;
public var scale_x:Number = Math.cos(angle);
public var scale_y:Number = Math.sin(angle);
public var posY:Number = stage.y;
public var goingUp:Boolean = false;
public var goingDown:Boolean = false;
//public var velocityX:Number = (speed*scale_x);
//public var velocityY:Number = (speed*scale_y);
public function ThrowIt() {
mySprite.graphics.beginFill(0x336699);
mySprite.graphics.drawRect(0,0,40,40);
//addChild(bg);
addChild(mySprite);
mySprite.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
mySprite.addEventListener(TouchEvent.TOUCH_END, onTouchEnd);
}
function onTouchBegin(e:TouchEvent) {
mySprite.startTouchDrag(e.touchPointID, false);
/*TRACK THE START POINT OF THE DRAG HERE*/
/*NEED THE X AND Y POSITION TO FIGURE OUT ANGLE AND VELOCITY OF OBJECT*/
startX = e.localX;
startY = e.localY;
trace("the starting x is " + startX);
}
function onTouchEnd(e:TouchEvent) {
mySprite.stopTouchDrag(e.touchPointID);
/*TRACK THE END POINT OF THE DRAG HERE*/
/*AGAIN, NEED BOTH THE X AND Y POSITION*/
endY = e.localY;
endX = e.localX;
//angle = (endX - startX)*Math.PI(180);
/*AFTER GETTING THE VELOCITY FIGURED OUT, THROW OBJECT*/
if(!goingUp){
goingUp = true;
//moving = speedLimit*-1;
moving = (startY - endY)*-1;
moving += .2;
mySprite.y += moving;
mySprite.y = Math.min(mySprite.y, stage.stageHeight - 510); //min position of the object
mySprite.y = Math.max(mySprite.y, 0); ///max position of the object
}
if(moving < 0){//if mySprite is still going up
moving *= 1 - speedLimit/250;//decrease moving slightly
if(moving > -speedLimit*.1){//if moving is small enough
moving *= -1;//then begin to go down
}
}
if(moving > 0 && moving <= speedLimit){//if mySprite is going down
moving *= 1 + speedLimit/400;//increase the falling speed
}
mySprite.y += moving;
//WHEN OBJECT GOES BELOW THE STAGE, DELETE IT AND STOP TRACKING EVENTS
if(mySprite.y >= stage.stageHeight){
removeChild(mySprite);
mySprite.removeEventListener(TouchEvent.TOUCH_END, onTouchEnd);
mySprite.removeEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
trace("removed");
}
}
}
}
당신이 e.localX, e.localY 또는 e.stageX와 함께 시도 않았다 e.stageY을 이벤트의 로컬 또는 글로벌 위치를, 도움이
희망? 이전에이 값을 검색하기 전에 touchPointID가 touchBegin과 동일한 지 확인해야합니다. 시작 이벤트의 touchPointID에 대한 참조를 유지해야합니다. 아마도 문서를 읽는 것으로 시작하는 것이 좋습니다. [TouchEvent documentation] (http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/flash/events/TouchEvent.html) –
@Binou 공유에 감사드립니다. 자원. 나는 몇 시간 동안 그것을보고 있었지만 구현을 이해할 수 없었다. 위의 코드를 업데이트했지만 여전히 문제가 있습니다. 이제 스프라이트를 화면 하단으로 드래그하면 무대에서 슛이 날 것입니다 (Android 기기에서 테스트). – questioner
당신의 문제는 무엇입니까? 필자는 터치 대신 enterframe 유형의 이벤트를 스프라이트에서 제거하려고하는 것을 보았습니다. 나는 onTouchEnd 함수에서 모든 throwing 코드를 제거하는 것이 더 좋을 것이라고 생각한다. 왜냐하면 이러한 유형의 함수는 여러 번 호출되어야하고 시간이 지남에 따라 호출되어야하기 때문이다. –