主要是将边界宽度与碰撞xy坐标设置正合适 不会出现角色回弹
加了个timmer 监听角色是否到达边角
//
//
// Copyright (c) 2014-present, Egret Technology.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the Egret nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//
class HomeScene extends eui.Component{
private vj:VirtualJoystick = new VirtualJoystick(); //虚拟摇杆
private player:eui.Rect; //人物
private speedX = 0; //人物移动速度
private speedY = 0;
private speed = 10;
public constructor() {
super();
this.skinName = "HomeSceneSkin";
}
public childrenCreated(){
//开启虚拟摇杆
this.vj.start();
this.vj.addEventListener("vj_start",this.onStart, this);
this.vj.addEventListener("vj_move", this.onChange, this);
this.vj.addEventListener("vj_end", this.onEnd, this);
}
//摇杆启动,人物开始根据摇杆移动
private onStart(){
this.addEventListener(egret.Event.ENTER_FRAME, this.onEnterFrame, this);
}
//触摸摇杆的角度改变,人物的移动速度方向也随之改变
private onChange(e:egret.Event){
var angle = e.data;
this.speedX = Math.cos(angle)*this.speed;
this.speedY = Math.sin(angle)*this.speed;
}
//停止摇杆,人物停止移动
private onEnd(){
this.removeEventListener(egret.Event.ENTER_FRAME, this.onEnterFrame, this);
}
//每帧更新,人物移动
private onEnterFrame(){
this.player.x += this.speedX;
this.player.y += this.speedY;
}
}
/**
* 虚拟摇杆
* @author chenkai
* @since 2017/5/4
*/
class VirtualJoystick extends eui.Component{
private ball:eui.Image; //圆环
private circle:eui.Image; //小球
private circleRadius:number = 0; //圆环半径
private ballRadius:number = 0; //小球半径
private centerX:number = 0; //中心点坐标
private centerY:number = 0;
private touchID:number; //触摸ID
public constructor() {
super();
this.skinName = "VirtualJoystickSkin";
}
public childrenCreated(){
//获取圆环和小球半径
this.circleRadius = this.circle.height/2;
this.ballRadius = this.ball.height/2;
//获取中心点
this.centerX = this.circleRadius;
this.centerY = this.circleRadius;
//设置锚点
this.anchorOffsetX = this.circleRadius;
this.anchorOffsetY = this.circleRadius;
//设置小球初始位置
this.ball.x = this.centerX;
this.ball.y = this.centerY;
}
//启动虚拟摇杆 (监听事件根据实际情况设置,不然点一下UI上的其他按钮,也会触发虚拟摇杆事件。这里只是做demo,就没那么讲究了 - -!)
public start(){
this.stage.addEventListener(egret.TouchEvent.TOUCH_BEGIN, this.onTouchBegin, this);
this.stage.addEventListener(egret.TouchEvent.TOUCH_END, this.onTouchEnd, this);
this.stage.addEventListener(egret.TouchEvent.TOUCH_MOVE, this.onTouchMove, this);
}
//停止虚拟摇杆
public stop(){
this.stage.removeEventListener(egret.TouchEvent.TOUCH_BEGIN, this.onTouchBegin, this);
this.stage.removeEventListener(egret.TouchEvent.TOUCH_END, this.onTouchEnd, this);
this.stage.removeEventListener(egret.TouchEvent.TOUCH_MOVE, this.onTouchMove, this);
}
//触摸开始,显示虚拟摇杆
private onTouchBegin(e:egret.TouchEvent){
if(this.parent){
return;
}
this.touchID = e.touchPointID;
this.x = e.stageX;
this.y = e.stageY;
this.ball.x = this.centerX;
this.ball.y = this.centerY;
this.stage.addChild(this);
this.dispatchEvent(new egret.Event("vj_start"));
}
//触摸结束,隐藏虚拟摇杆
private onTouchEnd(e:egret.TouchEvent){
if(this.touchID != e.touchPointID){
return;
}
this.hide();
this.dispatchEvent(new egret.Event("vj_end"));
}
//触摸移动,设置小球的位置
private p1:egret.Point = new egret.Point();
private p2:egret.Point = new egret.Point();
private onTouchMove(e:egret.TouchEvent){
if(this.touchID != e.touchPointID){
return;
}
//获取手指和虚拟摇杆的距离
this.p1.x = this.x;
this.p1.y = this.y;
this.p2.x = e.stageX;
this.p2.y = e.stageY;
var dist = egret.Point.distance(this.p1, this.p2);
var angle:number = Math.atan2(e.stageY - this.y, e.stageX - this.x);
//手指距离在圆环范围内
if(dist <= (this.circleRadius - this.ballRadius)){
this.ball.x = this.centerX + e.stageX - this.x;
this.ball.y = this.centerY + e.stageY - this.y;
//手指距离在圆环范围外
}else{
this.ball.x = Math.cos(angle)*(this.circleRadius - this.ballRadius) + this.centerX;
this.ball.y = Math.sin(angle)*(this.circleRadius - this.ballRadius) + this.centerY;
}
//派发事件
this.dispatchEventWith("vj_move", false, angle);
}
private hide(){
this.parent && this.parent.removeChild(this);
}
}
class ScrollerPosition extends eui.UILayer {
private scroller: eui.Scroller;
constructor() {
super();
//创建一个列表
var list = new eui.List();
list.dataProvider = new eui.ArrayCollection([1, 2, 3, 4, 5]);
//创建一个 Scroller
var scroller = new eui.Scroller();
scroller.height = 160;
scroller.viewport = list;
this.addChild(scroller);
this.scroller = scroller;
//创建一个按钮,点击后改变 Scroller 滚动的位置
var btn = new eui.Button();
btn.x = 200;
this.addChild(btn);
btn.addEventListener(egret.TouchEvent.TOUCH_TAP,this.moveScroller,this);
}
protected createChildren() {
//初始化后改变滚动的位置
this.scroller.viewport.validateNow();
this.scroller.viewport.scrollV = 40;
}
private moveScroller():void{
//点击按钮后改变滚动的位置
var sc = this.scroller;
sc.viewport.scrollV += 10;
if ((sc.viewport.scrollV + sc.height) >= sc.viewport.contentHeight) {
console.log("滚动到底部了");
}
}
}
class Main extends egret.DisplayObjectContainer {
public constructor() {
super();
this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this);
}
private onAddToStage(event: egret.Event) {
egret.lifecycle.addLifecycleListener((context) => {
// custom lifecycle plugin
context.onUpdate = () => {
}
})
egret.lifecycle.onPause = () => {
egret.ticker.pause();
}
egret.lifecycle.onResume = () => {
egret.ticker.resume();
}
this.runGame().catch(e => {
console.log(e);
})
}
private async runGame() {
await this.loadResource()
this.createGameScene();
const result = await RES.getResAsync("description_json")
this.startAnimation(result);
await platform.login();
const userInfo = await platform.getUserInfo();
console.log(userInfo);
}
private async loadResource() {
try {
const loadingView = new LoadingUI();
this.stage.addChild(loadingView);
await RES.loadConfig("resource/default.res.json", "resource/");
await RES.loadGroup("preload", 0, loadingView);
this.stage.removeChild(loadingView);
}
catch (e) {
console.error(e);
}
}
private textfield: egret.TextField;
/**
* 创建游戏场景
* Create a game scene
*//
/
private createGameScene() {
var ang=new angle67();
var z:egret.Shape = new egret.Shape;
z.graphics.beginFill( 16033 );
z.graphics.drawRect( 0, 6, 60,1132 );
z.graphics.endFill();
this.addChild(z);//将bg添加到舞台上
var x6:egret.Shape = new egret.Shape;
x6.graphics.beginFill( 16033 );
x6.graphics.drawRect(600, 6, 60,1132 );
x6.graphics.endFill();
this.addChild(x6);//将bg添加到舞台上
var x7:egret.Shape = new egret.Shape;
x7.graphics.beginFill( 16033 );
x7.graphics.drawRect(0,1100, 630,60 );
x7.graphics.endFill();
this.addChild(x7);//将bg添加到舞台上
//var group = new eui.Group();
// var img = new eui.Image("resource/assets/io.jpg");
// group.addChild(img);
//创建一个Scroller
// var myScroller = new eui.Scroller();
//注意位置和尺寸的设置是在Scroller上面,而不是容器上面
// myScroller.width = this.stage.stageWidth;
// myScroller.height = this.stage.stageHeight;
//设置viewport
//myScroller.viewport = group;
// this.addChild(myScroller);
var group:egret.Sprite = new egret.Sprite();
var img = new eui.Image("resource/assets/io.jpg");
group.addChild(img);
//创建一个Scroller
// var myScroller = new eui.Scroller();
//注意位置和尺寸的设置是在Scroller上面,而不是容器上面
// myScroller.width = this.stage.stageWidth;
// myScroller.height = this.stage.stageHeight;
//设置viewport
// myScroller.viewport = group;
this.addChild(group);
var shang:egret.Shape = new egret.Shape;
shang.graphics.beginFill( 16033 );
shang.graphics.drawRect( 80, 460, 60,60 );
shang.graphics.endFill();
shang.touchEnabled=true;
shang.addEventListener(egret.TouchEvent.TOUCH_TAP,bshang,this);
function bshang(){
// myScroller.viewport.scrollV =myScroller.viewport.scrollV+10; //纵向滚动的位置
// myScroller.viewport.scrollH =10+myScroller.viewport.scrollH//横向滚动的位置
sky.y=sky.y+10;
}
//btn.addEventListener(egret.TouchEvent.TOUCH_TAP,moveScroller,this);
// var bg:egret.Shape = new egret.Shape;
// bg.graphics.beginFill( 0x336699 );
// bg.graphics.drawRect( 0, 0, this.stage.stageWidth, this.stage.stageHeight );
// bg.graphics.endFill();
// this.addChild(bg);//将bg添加到舞台上
/
/
this.addChild(shang);//将bg添加到舞台上
var sky:egret.Bitmap = new egret.Bitmap();
sky.texture = RES.getRes("bg_jpg");
this.addChild(sky);
let stageW = 160;
let stageH = 160;
sky.width = stageW;
sky.height = stageH;
sky.x=60;
sky.y=60;
/
///
var enemy:egret.Bitmap = new egret.Bitmap();
enemy.texture = RES.getRes("bg_jpg");
this.addChild(enemy);
// let stageW = 160;
// let stageH = 160;
enemy.width = 160;
enemy.height = 160;
enemy.x=270;
enemy.y=70;
/
///
// var shang:egret.Shape = new egret.Shape;
// shang.graphics.beginFill( 16033 );
// shang.graphics.drawRect( 80, 460, 60,60 );
// shang.graphics.endFill();
//shang.touchEnabled=true;
//shang.addEventListener(egret.TouchEvent.TOUCH_TAP,bshang,this);
// this.addChild(shang);//将bg添加到舞台上
// function bshang(){
// sky.y=sky.y+10;
// }
///
//
this.stage.addEventListener(egret.TouchEvent.TOUCH_BEGIN, (e: egret.TouchEvent) => {
console.log(e.stageX+"yyyy"+e.stageY) ;
console.log(e.localX+"yyyyyy"+e.localY);
// console.log(e.stageY);
// drawCir.y = e.localY;
}, this);
var shpwai:egret.Shape = new egret.Shape();
//shpwai.x = 460;
// shpwai.y = 160;
shpwai.graphics.beginFill( 0x00ff00 );
shpwai.graphics.drawCircle( 360, 180, 100 );
shpwai.graphics.endFill();
this.addChild( shpwai );
var nei:egret.Shape = new egret.Shape();
// shp.x = 460;
// shp.y = 160;
var neix=360;
var neiy=180
nei.graphics.beginFill( 0xff0000);
nei.graphics.drawCircle( neix, neiy, 40 );
nei.graphics.endFill();
nei.touchEnabled=true;
this.addChild( nei );
//var ;
//var angle6:number;
var tingbeijing: boolean=true;
nei.addEventListener(egret.TouchEvent.TOUCH_MOVE,onnei, this);
nei.stage.addEventListener(egret.TouchEvent.TOUCH_END,leavenei, this);
function leavenei(){
timer.stop();
nei.x=0;//停止触摸 摇杆回位
nei.y=0;
}
var p1:egret.Point=new egret.Point();
var p2:egret.Point=new egret.Point();
var timer:egret.Timer=new egret.Timer(1,0);
timer.addEventListener(egret.TimerEvent.TIMER,cont6,this);
var timer2:egret.Timer=new egret.Timer(1,0);
timer2.addEventListener(egret.TimerEvent.TIMER,cont62,this);
var timer4:egret.Timer=new egret.Timer(1,0);
timer4.addEventListener(egret.TimerEvent.TIMER,cont624,this);
function cont624(e:egret.TouchEvent){
//if()
if(group.x<=-1982||group.y<=-1986){
tingbeijing=false;
console.log("cc");
}//
}
function cont62(e:egret.TouchEvent){
var ccc=new peng2();
ccc.run(z,sky);
// var isHit:boolean = sky.hitTestPoint( stageH, stageW ,true);
var rect1= new egret.Rectangle(sky.x,sky.y,sky.width,sky.height);
var zuo= new egret.Rectangle(0, 6, 0.5,1132);
var you= new egret.Rectangle(600, 6, 0.5,1132);
var xia= new egret.Rectangle(0, 1100, 630,0.5);
var shang= new egret.Rectangle(0, 6, 630,0.5);
//console.log(x7.y);
var a=new peng2();
//a.run(xc,sky);
var ishit =rect1.intersects (zuo);
if(ishit==true){
// console.log("true");
sky.x=sky.x-sky.x+1;
// myScroller.x = 1;
// myScroller.width = 600;
// timer.stop()
// myScroller.height = this.stage.stageHeight;
//myScroller.height = this.stage.stageHeight;
// tingbeijing=false;
// if()
// sky.x=Math.cos(ang.jieguo)*10+sky.x;
// }
// else{
tingbeijing=true;
}
var ishityou =rect1.intersects (you);
if(ishityou==true){
// console.log("true");
sky.x=430;
// tingbeijing=false;
}//else{tingbeijing=true;}
var ishitxia =rect1.intersects (xia);
if(ishitxia==true){
// console.log("true");
sky.y=940;
// tingbeijing=false;
}//else{tingbeijing=true;}
var ishitshang =rect1.intersects (shang);
if(ishitshang==true){
// console.log("true");
sky.y=1;
// tingbeijing=false;
}//else{tingbeijing=true;}
}
var jiaodu=180-ang.jieguo;
function cont6(){
// console.log(jiaodu);
// this.removeChild(myScroller);
timer2.start();
///
///
//想让小秋移动 需要sin cos角度 乘速度 再加小球x y
//想让小球不停移动需要加个定时器
// timer.stop();
sky.x=Math.cos(ang.jieguo)*10+sky.x;
console.log(group.x+"xxxxxxxxxxxxxxxxxxxxxxxxxxx"+group.y);
sky.y=Math.sin(ang.jieguo)*10+sky.y;//Math.cos(ang.jieguo)*10
if(tingbeijing==true){
group.x=group.x-Math.cos(ang.jieguo)*2; //纵向滚动的位置
group.y =group.y-Math.sin(ang.jieguo)*2}
// enemy.x =enemy.x+6; //纵向滚动的位置
// this.addChild(myScroller);
// timer.start();
}
//var angle:number = Math.atan2(e.stageY - 180, e.stageX - 360);
// console.log(angle+"666666666666666666666");
//var dist=egret.Point.distance(p1,p2);
function onnei(e: egret.TouchEvent):void{
console.log(group.x+"my");
timer4.start();
if(e.stageX<=440||e.stageY<=240){//fang zhi bie de di fang di ji hou tong yang cao zuo yao gan
var xz=e.stageX;
var xy=e.stageY;
//console.log("xxxxxx"+xz+"yyyyyyyyyyyy"+xy);
nei.x=e.stageX-360;//rang zuo biao hui dao yuan xin
nei.y=e.stageY-180;
var xx=nei.x-shpwai.x;
var zx=(xx)/100;
ang.run(e.stageY,180, e.stageX,360);//=Math.atan2(nei.y-shpwai.y,nei.x-shpwai.x);
p2.x=nei.x+360;
p2.y=nei.y+180;
p1.x=360;
p1.y=180;
// console.log(180-angle6);
// console.log(sky.x+"sky.y"+sky.y);
timer.start();//}
//}
var dist = egret.Point.distance(p1, p2);
/
//下面的是用来算小球的位置 而不是角色位置
//console.log(dist);
if(dist<=(100-40)){//e.stageY-nei.y>100){
var dx:number=nei.x-360;//xian zai de dian dao yuan xin de x ju li
var dy:number=nei.y-shpwai.y;//xian zai de dian dao yuan xin de y ju li
var dixy=Math.atan2(dy,dx);// qiu de shi shang mian x y de jia jiao
var dd=180*dixy/Math.PI;//jiang qiu de jiao du zhuan huan wei hu du
var cc= Math.cos(dd*Math.PI/180)*6;
// console.log(cc+"//");
// console.log(nei.x+".....................");
nei.x=nei.x;//如果在圆环内 小球的坐标等于鼠标当前坐标-小球初始坐标x
nei.y=nei.y;//如果在圆环内 小球的坐标等于鼠标当前坐标-小秋初始坐标y
//nei.x=Math.cos(dd*Math.PI/180)*60;//ji suan xiao yuan x
// nei.y=Math.sin(dd*Math.PI/180)*60;// ji suan xiao yuan y
// this.ball.x = this.centerX + e.stageX - this.x;
// sky.x=Math.cos(ang.jieguo)*10;
// sky.y=Math.sin(ang.jieguo)*10;
// myScroller.viewport.scrollV =Math.sin(angle6)*(100-nei.y)+180+nei.y*10 //纵向滚动的位置
//myScroller.viewport.scrollH =Math.cos(angle6)*(100-nei.x)+360+nei.x*10;//横向滚动的位置
// nei.y=(nei.y-shpwai.y)/100;
}
else{
// this.ball.x = Math.cos(angle)*(this.circleRadius - this.ballRadius) + this.centerX;
nei.x=Math.cos(ang.jieguo)*(100-40);
nei.y=Math.sin(ang.jieguo)*(100-40);
// myScroller.viewport.scrollV = Math.sin(angle6)*(100-nei.y)+180+nei.y*10//纵向滚动的位置
// myScroller.viewport.scrollH =Math.cos(angle6)*(100-nei.x)+360+nei.x*10;//横向滚动的位置
}
//var radius=100;
// console.log(angle6);
}
}
//
/
var xia:egret.Shape = new egret.Shape;
xia.graphics.beginFill( 16033 );
xia.graphics.drawRect( 80, 540, 60,60 );
xia.graphics.endFill();
xia.touchEnabled=true;
xia.addEventListener(egret.TouchEvent.TOUCH_TAP,bxia,this);
this.addChild(xia);//将bg添加到舞台上
function bxia(){
sky.y=sky.y-10;
}
/
// sky.texture=RES.getRes("hk1_png");
// console.log("cc");
var zuo:egret.Shape = new egret.Shape;
zuo.graphics.beginFill( 16033 );
zuo.graphics.drawRect( 6,500, 60, 60 );
zuo.graphics.endFill();
zuo.touchEnabled=true;
zuo.addEventListener(egret.TouchEvent.TOUCH_TAP,bzuo,this);
this.addChild(zuo);//将bg添加到舞台上
function bzuo(){
sky.x=sky.x+10;
}
///
var btt=new button7();
btt.run(16033,160,500,60,60,byou);//chuan zhi gei class button
// var you:egret.Shape = new egret.Shape;
// you.graphics.beginFill( 16033 );
// you.graphics.drawRect( 160, 500, 60, 60 );
// you.graphics.endFill();
var you=btt.bt;//huo qu fan hui de zhi
//you.touchEnabled=true;
// you.addEventListener(egret.TouchEvent.TOUCH_TAP,byou,this);
this.addChild(you);//将bg添加到舞台上
function byou(){
sky.x=sky.x-10;
}
///
var button6:egret.Shape = new egret.Shape;
button6.graphics.beginFill( 16033 );
button6.graphics.drawRect( 260, 560, 60, 60 );
button6.graphics.endFill();
button6.touchEnabled=true;
button6.addEventListener(egret.TouchEvent.TOUCH_TAP,button,this);
this.addChild(button6);//将bg添加到舞台上
function button(){
sky.texture=RES.getRes("hk1_png");
console.log("cc");
/
/
//tian jia dong hua
var js:string="lp_json";
var da:string="6_png";
var dh6=new dh();//xin jian dui xiang
dh6.run(dh6.json=js,dh6.data6="lp_png");//jiang duixiang zhong de zhi jia zai jin qu
//var dhh=dh6.dh;
dh6.dh.x = sky.x;
dh6.dh.y = sky.y;
dh6.dh.width=60;
dh6.dh.height=60;
dh6.dh.gotoAndPlay(0,1);
this.addChild( dh6.dh);
/
/
// var rect1=new egret.Rectangle(enemy.x,enemy.y,enemy.width,enemy.height);
//var rect2=new egret.Rectangle(kongmingMC.x+160,kongmingMC.y+160,kongmingMC.width,kongmingMC.height);
//var io:boolean=rect2.intersects(rect1);
//console.log(io);
/
//jia peng
var a = new peng();
a.run(dh6.dh,enemy);
//var a = hitTest(kongmingMC,enemy);
if(a.o==true){
this.removeChild(enemy);
}
console.log(a);//输出3次
dh6.dh.addEventListener(egret.Event.COMPLETE, (e:egret.Event)=>{
//var isHit = obj.hitTestPoint(x,y);
// var hi:boolean=enemy.hitTestPoint(sky.,sky.y,true);
// if(hit==true){console.log("hit");}
console.log(e.type);//输出3次
this.removeChild(dh6.dh);
}, this);
}
}
/**
* 根据name关键字创建一个Bitmap对象。name属性请参考resources/resource.json配置文件的内容。
* Create a Bitmap object according to name keyword.As for the property of name please refer to the configuration file of resources/resource.json.
*/
private createBitmapByName(name: string) {
let result = new egret.Bitmap();
let texture: egret.Texture = RES.getRes(name);
result.texture = texture;
return result;
}
/**
* 描述文件加载成功,开始播放动画
* Description file loading is successful, start to play the animation
*/
private startAnimation(result: string[]) {
let parser = new egret.HtmlTextParser();
let textflowArr = result.map(text => parser.parse(text));
let textfield = this.textfield;
let count = -1;
let change = () => {
count++;
if (count >= textflowArr.length) {
count = 0;
}
let textFlow = textflowArr[count];
// 切换描述内容
// Switch to described content
textfield.textFlow = textFlow;
let tw = egret.Tween.get(textfield);
tw.to({ "alpha": 1 }, 200);
tw.wait(2000);
tw.to({ "alpha": 0 }, 200);
tw.call(change, this);
};
change();
}
}