Oxin8 Posted February 4, 2006 Share Posted February 4, 2006 Does anyone have any ideas for speeding this up or making it more efficient? expandcollapse popupWhile 1 if $input[4]<200 and $fire1=1 Then MouseUp("left") $fire1=0 EndIf if $input[4]>200 and $fire1=0 then MouseDown ( "left" ) $fire1=1 EndIf if $input[3]<200 and $fire2=1 Then MouseUp("right") $fire2=0 EndIf if $input[3]>200 and $fire2=0 then MouseDown ( "right" ) $fire2=1 EndIf If $input[6]<22000 and $forward = 1 then Send("{w up}") $forward=0 EndIf If $input[6]>22000 and $forward = 0 then Send("{w down}") $forward=1 EndIf If $input[6]>-22000 and $back = 1 then Send("{s up}") $back=0 EndIf If $input[6]<-22000 and $back = 0 then Send("{s down}") $back=1 EndIf If $input[5]<22000 and $left = 1 then Send("{a up}") $left=0 EndIf If $input[5]>22000 and $left = 0 then Send("{s down}") $left=1 EndIf If $input[5]>-22000 and $right = 1 then Send("{d up}") $right=0 EndIf If $input[5]<-22000 and $right = 0 then Send("{d down}") $right=1 EndIf Sleep(1) WEnd There's other code in the loop to but it didn't really slow down until i added all these if's. And taking the Sleep(1) out, resulting in 90%ish CPU usage is not an option. ~My Scripts~ *********_XInput UDF for Xbox 360 ControllerSprayPaint_MouseMovePlus Link to comment Share on other sites More sharing options...
cdkid Posted February 4, 2006 Share Posted February 4, 2006 this may or may not help but you may want to try something like Select Case $variable = "value" ...do stuff here case $variable = "value1" ...do stuf EndSelect AutoIt Console written in C#. Write au3 code right at the console :D_FileWriteToLineWrite to a specific line in a file.My UDF Libraries: MySQL UDF Library version 1.6 MySQL Database UDF's for AutoItI have stopped updating the MySQL thread above, all future updates will be on my SVN. The svn location is:kan2.sytes.net/publicsvn/mysqlnote: This will still be available, but due to my new job, and school hours, am no longer developing this udf.My business: www.hirethebrain.com Hire The Brain HireTheBrain.com Computer Consulting, Design, Assembly and RepairOh no! I've commited Scriptocide! Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted February 4, 2006 Moderators Share Posted February 4, 2006 Your checking every instance every time, when you only need to check it once... this will speed it up a bit...expandcollapse popupIf $input[4]<200 and $fire1=1 Then MouseUp("left") $fire1=0 Elseif $input[4]>200 and $fire1=0 then MouseDown ( "left" ) $fire1=1 EndIf If $input[3]<200 and $fire2=1 Then MouseUp("right") $fire2=0 Elseif $input[3]>200 and $fire2=0 then MouseDown ( "right" ) $fire2=1 EndIf If $input[6]<22000 and $forward = 1 then Send("{w up}") $forward=0 ElseIf $input[6]>22000 and $forward = 0 then Send("{w down}") $forward=1 EndIf If $input[6]>-22000 and $back = 1 then Send("{s up}") $back=0 ElseIf $input[6]<-22000 and $back = 0 then Send("{s down}") $back=1 EndIf If $input[5]<22000 and $left = 1 then Send("{a up}") $left=0 ElseIf $input[5]>22000 and $left = 0 then Send("{s down}") $left=1 EndIf If $input[5]>-22000 and $right = 1 then Send("{d up}") $right=0 ElseIf $input[5]<-22000 and $right = 0 then Send("{d down}") $right=1 EndIf Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
PsaltyDS Posted February 4, 2006 Share Posted February 4, 2006 Does anyone have any ideas for speeding this up or making it more efficient? CODEWhile 1 if $input[4]<200 and $fire1=1 Then MouseUp("left") $fire1=0 EndIf if $input[4]>200 and $fire1=0 then MouseDown ( "left" ) $fire1=1 EndIf if $input[3]<200 and $fire2=1 Then MouseUp("right") $fire2=0 EndIf if $input[3]>200 and $fire2=0 then MouseDown ( "right" ) $fire2=1 EndIf If $input[6]<22000 and $forward = 1 then Send("{w up}") $forward=0 EndIf If $input[6]>22000 and $forward = 0 then Send("{w down}") $forward=1 EndIf If $input[6]>-22000 and $back = 1 then Send("{s up}") $back=0 EndIf If $input[6]<-22000 and $back = 0 then Send("{s down}") $back=1 EndIf If $input[5]<22000 and $left = 1 then Send("{a up}") $left=0 EndIf If $input[5]>22000 and $left = 0 then Send("{s down}") $left=1 EndIf If $input[5]>-22000 and $right = 1 then Send("{d up}") $right=0 EndIf If $input[5]<-22000 and $right = 0 then Send("{d down}") $right=1 EndIf Sleep(1) WEndThere's other code in the loop to but it didn't really slow down until i added all these if's. And taking the Sleep(1) out, resulting in 90%ish CPU usage is not an option. Every one of your If conditions gets tested, even if it is contradictory to a previous result. Make some use of 'Else' so conditions don't have to be retested and the $input array doesn't have to be re-read. For example: if $input[4] < 200 Then if $fire1=1 Then MouseUp("left") $fire1=0 EndIf Else if $fire1=0 then MouseDown ( "left" ) $fire1=1 EndIf EndIf That example follows the else condition if $input[4] = 200, which you didn't seem to account for, but you get the idea of the if/else... Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
Oxin8 Posted February 4, 2006 Author Share Posted February 4, 2006 @SmOke_N: Thanks. It slightly increased the speed but not enough make me content with it. @PsaltyDS: That method worked a little better than SmOke_N's but again, I still want it a little faster if possible. Would use of _IsPressed instead of all the switch variables be better? ~My Scripts~ *********_XInput UDF for Xbox 360 ControllerSprayPaint_MouseMovePlus Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted February 4, 2006 Moderators Share Posted February 4, 2006 (edited) IsPressed only tells you if the key was pressed, it doesn't do the action for you. Edit: You know the bigger question here is how are you creating the array that your using for these coords. That may play a bigger factor in speed than just adjusting what it is that your doing here. Edited February 4, 2006 by SmOke_N Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Oxin8 Posted February 4, 2006 Author Share Posted February 4, 2006 the array is retrieved through a dll call for a joystick. no optimization can be done there. I know IsPressed is only good for detecting but that's what my switches are for: To make sure that i only send a key up when it is already down. ~My Scripts~ *********_XInput UDF for Xbox 360 ControllerSprayPaint_MouseMovePlus Link to comment Share on other sites More sharing options...
Oxin8 Posted February 5, 2006 Author Share Posted February 5, 2006 Well, here's what I have right now: expandcollapse popupIf $input[4]<200 Then If $fire1=1 Then MouseUp("left") $fire1=0 EndIf Else If $fire1=0 then MouseDown ( "left" ) $fire1=1 EndIf EndIf If $input[3]<200 Then If $fire2=1 Then MouseUp("right") $fire2=0 EndIf Else If $fire2=0 then MouseDown ( "right" ) $fire2=1 EndIf EndIf If $input[6]<22000 Then If $forward = 1 then Send("{w up}") $forward=0 EndIf Else If $forward = 0 then Send("{w down}") $forward=1 EndIf EndIf If $input[6]>-22000 Then If $back = 1 then Send("{s up}") $back=0 EndIf Else If $back = 0 then Send("{s down}") $back=1 EndIf EndIf If $input[5]<22000 Then If $left = 1 then Send("{a up}") $left=0 EndIf Else If $left = 0 then Send("{s down}") $left=1 EndIf EndIf If $input[5]>-22000 Then If $right = 1 then Send("{d up}") $right=0 EndIf Else If $right = 0 then Send("{d down}") $right=1 EndIf EndIf Anymore options or is this the end of the line? I'd really like to know either way because I will need to make changes to the rest of the script based on the speed of the script. ~My Scripts~ *********_XInput UDF for Xbox 360 ControllerSprayPaint_MouseMovePlus Link to comment Share on other sites More sharing options...
PsaltyDS Posted February 5, 2006 Share Posted February 5, 2006 Well, here's what I have right now: CODEIf $input[4]<200 Then If $fire1=1 Then MouseUp("left") $fire1=0 EndIf Else If $fire1=0 then MouseDown ( "left" ) $fire1=1 EndIf EndIf If $input[3]<200 Then If $fire2=1 Then MouseUp("right") $fire2=0 EndIf Else If $fire2=0 then MouseDown ( "right" ) $fire2=1 EndIf EndIf If $input[6]<22000 Then If $forward = 1 then Send("{w up}") $forward=0 EndIf Else If $forward = 0 then Send("{w down}") $forward=1 EndIf EndIf If $input[6]>-22000 Then If $back = 1 then Send("{s up}") $back=0 EndIf Else If $back = 0 then Send("{s down}") $back=1 EndIf EndIf If $input[5]<22000 Then If $left = 1 then Send("{a up}") $left=0 EndIf Else If $left = 0 then Send("{s down}") $left=1 EndIf EndIf If $input[5]>-22000 Then If $right = 1 then Send("{d up}") $right=0 EndIf Else If $right = 0 then Send("{d down}") $right=1 EndIf EndIfAnymore options or is this the end of the line? I'd really like to know either way because I will need to make changes to the rest of the script based on the speed of the script. How about seperate compiled scripts? Split the job into two or three seperate compiled scripts all running at the same time (or as nearly so as Window's thread scheduler can handle). Each script only has to monitor and respond to one or two conditions... Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now