나와 내 친구는 위에서 캐릭터를 볼 수있는 RPG 스타일 게임을 만들려고하고 있지만 개체 충돌과 관련하여 문제가 발생했습니다. 플래시 CS6의 객체 지향 AS3 프로젝트에서이 작업을 수행하고 있음을 언급 할 가치가 있습니다.액션 스크립트 3 개체 충돌로 인해 문자가 겹치지 않음
수백만 번 질문했지만 우리는 하루 종일 해결책을 찾고 있었고 지금까지 발견 한 것들이 box2d/nape 나 우리가 이미 알고있는 평범한 충돌 탐지.
우리가 가진 문제는 충돌을 감지하고 주인공이 정지되거나 멈추지 않고 장면의 객체와 겹치지 않게하는 편리한 방법을 원한다는 것입니다. 지금까지 문제를 해결하기위한 모든 시도를 해재했지만, 나머지 코드는 우리가 어디에 있는지 이해하는 데 도움이됩니다 (읽기가 어려울 경우 죄송합니다). 관련 자습서에 대한 어떤 제안이나 추천도 환영합니다.
메인 클래스
package {
import flash.display.Stage;
import flash.display.MovieClip;
import flash.events.Event;
public class Engine extends MovieClip
{
private var hero:Hero;
private var box1:Box1;
public function Engine()
{
box1 = new Box1();
stage.addChild(box1);
box1.x = stage.stageWidth/4;
box1.y = stage.stageHeight/2;
hero = new Hero(stage, box1);
stage.addChild(hero);
hero.x = stage.stageWidth/2;
hero.y = stage.stageHeight/2;
}
}
}
문자 클래스
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;
public class Hero extends MovieClip
{
private var box1:Box1;
private var stageRef:Stage;
private var vy:Number = 0;
private var vx:Number = 0;
private var limit:Number = 30;
private var rad:Number;
private var bounce:Number = 0.125;
private var _max:Number = 8;
public function Hero(stageRef:Stage, box1:Box1)
{
//box variable was used in previous experiments with hit tests
this.box1 = box1;
this.stageRef = stageRef;
Input.initialize(stageRef);
stageRef.addEventListener(Event.ENTER_FRAME, moveHero);
}
private function moveHero(e:Event):void
{
if (Input.kd("W","UP"))
{
vy = vy < 1 - _max ? _max * -1:vy - 1;
}
if (Input.kd("S","DOWN"))
{
vy = vy > _max - 1 ? _max:vy + 1;
}
else if (!Input.kd("W", "UP", "S", "DOWN"))
{
if (vy > 1)
{
vy = vy < 1 ? 0:vy - 1;
}
else
{
vy = vy > -1 ? 0:vy + 1;
}
}
if (Input.kd("A","LEFT"))
{
vx = vx < 1 - _max ? _max * -1:vx - 1;
}
if (Input.kd("D","RIGHT"))
{
vx = vx > _max - 1 ? _max:vx + 1;
}
else if (!Input.kd("A", "LEFT", "D", "RIGHT"))
{
if (vx > 1)
{
vx = vx < 1 ? 0:vx - 1;
}
else
{
vx = vx > -1 ? 0:vx + 1;
}
}
if (x < limit)
{
x = limit;
vx *= - bounce;
}
if (x > stage.stageWidth - limit)
{
x = stage.stageWidth - limit;
vx *= - bounce;
}
if (y < limit)
{
y = limit;
vy *= - bounce;
}
if (y > stage.stageHeight - limit)
{
y = stage.stageHeight - limit;
vy *= - bounce;
}
x += vx;
y += vy;
rad = (Math.atan2(stage.mouseY - y,stage.mouseX - x)) * 180/Math.PI;
this.rotation = rad;
}
}
}