some trouble with FlxState->FlxSprite.x read/write
-
something work wrong , i can not read and write Sprite position and other variables look at code please(the error should be inside Player.hx
move
function. can not read this.x , this.x0 parameters ):---Player.hx---
package; import flixel.FlxSprite; import flixel.system.FlxAssets.FlxGraphicAsset; import Math; import flixel.FlxG; import flixel.util.FlxTimer; /** * ... * @author user */ class Player extends FlxSprite { public var actiontimer:FlxTimer; public var lastUpdate:Float; public var speed:Int = 2000;//player move speed mm(px) per sec public var dt:Float;//time elapsed ms from move start moment public var x0:Float;//start move point coo x public var y0:Float;//start move point coo y public var x1:Float;//stop move point coo x public var y1:Float;//stop move point coo y public var dx:Float;//x1-x0 public var dy:Float;//y1-y0 public var movetime:Float;//were recount with use sin 30 degrees per y axis before start new move action public function move(dt:Float, ?x1:Float, ?y1:Float):Void { //change [x,y] = f(dt) position between x0,y0 and x1,y1 of horisontal player sprite displacement if (dt > 0){ //continue move this.dt = dt; this.x = this.x0 + this.dx * this.dt / this.movetime; this.y = this.y0 + this.dy * this.dt / this.movetime; }else{ //abort not completion move and/or start new move this.actiontimer.start(2); this.x0 = this.x; this.y0 = this.y; this.x1 = x1; this.y1 = y1; this.dx = this.x1 - this.x0; this.dy = this.y1 - this.y0; //dimensions different this.movetime = Math.sqrt(this.dx * this.dx + this.dy * this.dy / 4) / this.speed;//[sec] dy*dy/4 = (dy/sin30)*(dy/sin30) } } public function new(?X:Float=0, ?Y:Float=0, ?SimpleGraphic:FlxGraphicAsset) { actiontimer = new FlxTimer().start(20); super(X, Y, SimpleGraphic); } }
---PlayState.hx---
package; import flixel.FlxG; import flixel.FlxSprite; import flixel.FlxState; import flixel.text.FlxText; import flixel.ui.FlxButton; import flixel.math.FlxMath; class PlayState extends FlxState { var _court:FlxSprite; var _player0:Player; var _player1:Player; public var pselapsed:Float; override public function create():Void { _court = new FlxSprite(0, 0, "assets/images/court/court2.png"); add(_court); _player0 = new Player(0, 0, "assets/images/players/15.png"); _player1 = new Player(500, 500, MenuState.ballcolor); add(_player0); add(_player1); FlxG.watch.add(_player1.actiontimer, "elapsedTime", "p.at.eT"); FlxG.watch.add(_player1,"lastUpdate","p.lUpd"); FlxG.watch.add(_player1, "dt", "p.dt"); FlxG.watch.add(_player1,"x0", "p.x0"); FlxG.watch.add(_player1,"x", "p.x"); FlxG.watch.add(_player1,"x1", "p.x1"); FlxG.watch.add(_player1,"movetime", "p.mt"); super.create(); } override public function update(elapsed:Float):Void { pselapsed += elapsed; FlxG.watch.addQuick("pse", pselapsed); _player0.lastUpdate += elapsed*2; _player1.lastUpdate += elapsed; if (FlxG.mouse.pressed){ FlxG.watch.addQuick("upd", elapsed); if (FlxG.mouse.screenX > 3668 / 2){ _player0.x = 3000; _player1.move(0,FlxG.mouse.screenX,FlxG.mouse.screenY); } else{ _player0.x = 1000; _player1.move(0,FlxG.mouse.screenX,FlxG.mouse.screenY); } }else{ _player1.move(_player1.actiontimer.elapsedTime); //_player1.x+=_player1.actiontimer.elapsedTime+1; } super.update(elapsed); } }
this is screen video show FlxG.add.watch results
http://vk.com/video25450359_456239038
-
Not sure what you're trying to do but if you want to move the player, you should take a look at FlxObject::velocity. It's probably better than what you're doing.
For example:
player.velocity.set(50, 0); // will move there player to the right 50 pixels per second
-
@DleanJeans i can't do comfort, because in the future i will need calculate ball flying trajectory project (use sin30deg per y axis, that simulate vertical displacement per z-axis)
i try just offset sprite position use player.x player.x0(start position) , player.x1(end position) , and dt - time of action
the problem is in i can not read player.x and player.x0 inside body of class. x1 transport into function from outside and this correct behavior. but p.x and p.x0 have as class instance parameter. why i can not read/write this.x this.x0. it look strange
-
So you want to move the players to mouse position, you should use FlxVelocity::moveTowardsMouse(). It's better than reinventing the wheel.
If you want to do some calculations, the velocity of the player is a FlxPoint which stores x, y values at
velocity.x
andvelocity.y
.
-
@DleanJeans and if i want move sprite follow trajectory calculated in function and with not constant speed? as i see standart methods allow move sprites comfort only with constant speed. not with acceleration
-
Scroll up to the top and there's accelerateTowardsMouse for you
-
@DleanJeans this step solved. was error
if
statement logic in PlayState.hx. and it born start error NaN, which transport to each next step.
now it look terrible, but not dead 8)
this is short video
http://vk.com/video25450359_456239039