That said, JS in Max is really a slightly ugly cousin of browser based javascript. Calls to objects are long winded and basically everything is a bit head wrecking!
So here we go: the first in my "Making Max JS less crap" series... The infamous dollar function! All you need to do to access a max object is give the object a scripting name in the inspector* and then use: $('scriptingname')
Please see right hand pane before copying my code>>
function $(stringref){
stringref=stringref.replace(/parent/gi, "parentpatcher")
var path=stringref.split('.')
var obj=this.patcher
for(i in path){
if(path[i]=='parentpatcher'){ //up 1 level:
obj=obj.parentpatcher
}else{
obj=obj.getnamed(path[i])
if(i!=path.length-1){ //down 1 level:
obj=obj.subpatcher()
}
}
}
return(obj)
}
//USAGE:
$("myButton").message('set','new text!') //access 'myButton' object in current patcher
$("parent.myButton").message('set','new text!') //access 'myButton' object in parent patcher
$("myPatcher.myButton").message('set','new text!') //access 'myButton' object in child patcher
$("parent.myPatcher.myButton").message('set','new text!') //access 'myButton' object in sibling patcher
* If you're not bothered giving every patcher a unique scripting name in the inspector, try my lazy dollar function instead.UPDATE:
A good way to use this function is to use Luke Hall's include script. Save his script into your jsexternals folder, save my functions into your project folder as basefunctions.js (or something similar) and then you can simply use include(this,"basefunctions.js") at the top of every JS file you use. Thanks Luke - this is awesome!

2 comments:
Just a quick mention of the "jsextensions" folder in the Max search path. It's the best home for these types of utility functions as you can then use them in any other javascripts you write.
BUG: After some testing it turns out there are some problems calling this function in a for/while loop. Max seems to be mildly retarded when it comes to JS and the speed of the for loop is too fast for the function (wtf?!) and the program crashes like a big bastard.
Post a Comment