Hi, although I have some time using blender and its GE, I’m new to python, and it hadn’t been so dificult to learn (in fact Im impressed how fast to learn it is).
But I have the following problem;
Before doing the actual game I use to do some test blends, this one (attached) is intended to move an Empty (Trackref, to differece from the other empty) thru an ipo curve. Parented to Trackref is other empty called Empty.
This is the script:
#import all needed (and uneeded) things import GameLogic import Rasterizer import math from Rasterizer import setMousePosition #Getting controller, object list cont = GameLogic.getCurrentController() objList = GameLogic.getCurrentScene().getObjectList() #Owner, mousemove sensor, track empty Ow = cont.getOwner() mmove = cont.getSensor("MMov") track = objList["OBTrackref"] #Show mouse Rasterizer.showMouse(1) #Get center screen coordinates, mouse position CWidth = Rasterizer.getWindowWidth()/2 CHeight = Rasterizer.getWindowHeight()/2 CurrentXLoc = mmove.getXPosition() CurrentYLoc = mmove.getYPosition() #Define cursor-object interaction function def screenadd(mat1,mat2,mat3,mat4,mat5,fac): return mat1+((mat2-mat3)/mat3*2)*fac,mat1,mat1-((mat4-mat5)/mat5*2)*fac #Center mouse at start if Ow.init == 0: from Rasterizer import setMousePosition setMousePosition(CWidth,CHeight) Ow.init = 1 #After inicialization if Ow.init == 1: #Prevents mouse from getting out of the game screen #Dont know why doesnt work for top/left sides if CurrentXLoc >= CWidth*2: CurrentXLoc = CWidth*2 setMousePosition(CurrentXLoc,CurrentYLoc) if CurrentXLoc <= 1: CurrentXLoc = 1 setMousePosition(CurrentXLoc,CurrentYLoc) if CurrentYLoc >= CHeight*2: CurrentYLoc = CHeight*2 setMousePosition(CurrentXLoc,CurrentYLoc) if CurrentYLoc <= 1: CurrentYLoc = 1 setMousePosition(CurrentXLoc,CurrentYLoc) #get position of main track object orig = track.getPosition() #Uses defined fuction to add mouse position to track empty position new = screenadd(orig,CurrentXLoc,CWidth,CurrentYLoc,CHeight,2) #Aplies changes Ow.setPosition(new) #to chech if position is integrer (which is not the idea) print new
It works, but in a choppy way
The problem must be in the screenadd function I defined, it seems to be working with integrers while it should be using float numbers.
The screenadd works by getting the position of Trackref, then adds the X component of it with the Xposition of the mouse (which has been substracted by the median X window value to get a centered reference, then divided by the total width of the window so it becomes a resolution independent relation, and finally multiplied by a factor to scale the movement) and does the same with the Z component of Trackref and the Y value of the mouse. Finally this funtion is applied to Empty’s position.
The script also needs to run every frame, but it does only when the mouse moves
The ball is parented to Empty for vizualization utility.
Sorry for my english and thank you beforehand.
get to.blend (172 KB)