123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- // 对手发球的运动
- var Bump = require("bump")
- cc.Class({
- extends: cc.Component,
- properties: {
- g: {
- default: null,
- type: cc.Graphics,
- },
- bump: {
- default: null,
- type: Bump,
- },
- },
- // LIFE-CYCLE CALLBACKS:
- // onLoad () {},
- start () {
- this.initValues();
- },
- // 初始化数据
- initValues:function() {
- // 球的状态信息
- this.ballconfig = require("ballconfig");
- // 球的动作
- // 发球开始的区间
- this.serveStartRight = 167;
- this.serveStartLeft = 105;
- // 发球右的区间
- this.serveRightLeft = 28;
- // 发球中的区间
- this.serveMidLeft = -10;
- // 发球左的区间
- this.serveLeftLeft = -100;
- // 配置方程式的各项数据
- // 发球时数据
- this.serveStartX = 135;
- this.serveStartY = 350;
- this.serveStartDown = -30;
- // 发球时右边位置数据
- this.serveRightX = 118;
- this.serveRightY = 285;
- this.serveRightDown = -45;
- // 发球时中间位置数据
- this.serveMidX = 118;
- this.serveMidY = 190;
- this.serveMidDown = -95;
- // 发球时左侧的位置数据
- this.serveLeftX = 0;
- this.serveLeftY = 18;
- this.serveLeftDown = -92;
- this.g.lineWidth = 4;
- this.g.fillColor.fromHEX('#ffffff');
- this.x = this.serveStartRight;
- },
- ballServe:function() {
- this.unschedule(this.ballUpdate);
- this.x = this.serveStartRight;
- this.schedule(this.ballUpdate, 1.0 / 60);
- },
- ballStop:function() {
- this.unschedule(this.ballUpdate);
- },
- ballUpdate:function (dt) {
- this.g.clear();
- var speed = 0;
- var state;
- if (this.x <= this.serveStartRight + 10 && this.x >= this.serveStartLeft) {
- speed = 1.309;
- state = this.ballconfig.BALL_STATE_SERVE_START;
- } else if (this.x < this.serveStartLeft && this.x >= this.serveRightLeft) {
- speed = 12;
- state = this.ballconfig.BALL_STATE_SERVE_RIGHT;
- } else if (this.x < this.serveRightLeft && this.x >= this.serveMidLeft) {
- speed = 9;
- state = this.ballconfig.BALL_STATE_SERVE_MID;
- } else if (this.x < this.serveMidLeft && this.x >= this.serveLeftLeft) {
- speed = 8;
- state = this.ballconfig.BALL_STATE_SERVE_LEFT;
- } else {
- speed = 8;
- state = this.ballconfig.BALL_STATE_DROP_IN_MINE;
- }
- if (this.stateCallback != null) {
- // 给控制器传递发球左侧的状态
- this.stateCallback(state);
- }
- // 判断是否需要磕碰
- var next = this.x - speed;
- if (this.x > this.serveMidLeft && next < this.serveMidLeft) {
- this.bump.bump(cc.v2(this.x, this.serveEquation(this.x)));
- }
- this.x = next;
- this.g.lineWidth = 3;
- this.g.moveTo(this.x, this.serveEquation(this.x));
- this.g.bezierCurveTo(this.x, this.serveEquation(this.x), this.x + 5, this.serveEquation(this.x + 5), this.x + 10, this.serveEquation(this.x + 10));
- this.g.stroke();
- },
- // 发球时的方程式
- serveEquation:function(x) {
- // 判断各个不同的区间
- if (x <= this.serveStartRight + 10 && x >= this.serveStartLeft) {
- return (x * x - this.serveStartX * 2 * x + this.serveStartX * this.serveStartX) / this.serveStartDown + this.serveStartY;
- } else if (x < this.serveStartLeft && x >= this.serveRightLeft) {
- return (x * x - this.serveRightX * 2 * x + this.serveRightX * this.serveRightX) / this.serveRightDown + this.serveRightY;
- } else if (x < this.serveRightLeft && x >= this.serveMidLeft) {
- return (x * x - this.serveMidX * 2 * x + this.serveMidX * this.serveMidX) / this.serveMidDown + this.serveMidY;
- }
- return (x * x - this.serveLeftX * 2 * x + this.serveLeftX * this.serveLeftX) / this.serveLeftDown + this.serveLeftY;
- // return 0;
- },
- // 绘制坐标线
- drawAxle:function() {
- this.g.lineWidth = 2;
- this.g.moveTo(-1000, 0);
- this.g.lineTo(1000, 0);
- this.g.stroke();
- this.g.moveTo(0, -1000);
- this.g.lineTo(0, 1000);
- this.g.stroke();
- },
- });
|