Event: Difference between revisions

From Legacy Roblox Wiki
Jump to navigationJump to search
>GoldenUrg
→‎Advanced Usage: function name
>LPGhatguy
Capitalization and spaces and explanation.
Line 8: Line 8:
Events have these functions:
Events have these functions:


*[[#connect|connect]]( [[Function]] callback )
*[[#connect|connect]]([[Function]] callback)
*[[#wait|wait]]()
*[[#wait|wait]]()
*<strike>disconnect( [[Function]] callback )</strike>
*<strike>disconnect([[Function]] callback)</strike>


=== connect ===
=== connect ===
Line 17: Line 17:
The connect method returns another special object called a [[#connection|connection]] object.
The connect method returns another special object called a [[#connection|connection]] object.
{{example|<pre>
{{example|<pre>
Workspace.Part.Touched:connect( myTouchedFunction )
game.Workspace.Part.Touched:connect(myTouchedFunction)
</pre>
</pre>
This causes myTouchedFunction to be called whenever that [[Part]] is touched by another Part.
This causes myTouchedFunction to be called whenever that [[Part]] is touched by another Part.
Line 49: Line 49:
To allow our function to use that, we defined it as:
To allow our function to use that, we defined it as:
<pre>
<pre>
function onTouched( otherPart )
function onTouched(otherPart)
</pre>
</pre>


Finally, we can used the last piece of information to make a connection to that function:
Finally, we can used the last piece of information to make a connection to that function:
<pre>
<pre>
part.Touched:connect( onTouched )
part.Touched:connect(onTouched)
</pre>
</pre>


{{example|<pre>local part = Workspace.Part -- your part here
{{example|<pre>local part = game.Workspace.Part -- your part here
function onTouched( otherPart )
function onTouched(otherPart)
   otherPart.Transparency = 1 -- make part that touched invisible
   otherPart.Transparency = 1 -- make part that touched invisible
   part.BrickColor = BrickColor.Random() -- give this part a new random color
   part.BrickColor = BrickColor.Random() -- give this part a new random color
end
end


part.Touched:connect( onTouched ) -- call onTouched each time something touches
part.Touched:connect(onTouched) -- call onTouched each time something touches
</pre>}}
</pre>}}
Here we are giving "otherPart" to the function. This allows us to use the variable "otherPart" inside the function to be our part that we set up above, in the variable "part".


== Limitations ==
== Limitations ==
Line 82: Line 84:
<pre>
<pre>
function blah()
function blah()
   print( "In event" )
   print("In event")
end
end
part.Changed:connect( blah )
part.Changed:connect(blah)
</pre>
</pre>
Using anonymous functions in connect is common:
Using anonymous functions in connect is common:
<pre>
<pre>
part.Touched:connect(  
part.Touched:connect(  
  function( otherPart )
function(otherPart)
    otherPart.Transparency = 1
  otherPart.Transparency = 1
    part.BrickColor = BrickColor.Random()
  part.BrickColor = BrickColor.Random()
  end -- end for function
end) -- end anonymous function and connect
) -- close paranthesis for connect
</pre>
</pre>


Line 99: Line 100:
<pre>
<pre>
player.Chatted:connect(
player.Chatted:connect(
  function( message, recipient )
function(message, recipient)
    onChatted( player, message ) -- new arguments need to match onChatted function call
  onChatted(player, message) -- new arguments need to match onChatted function call
  end
end)
)
</pre>
</pre>


You can create connections at any time even inside of event functions:
You can create connections at any time even inside of event functions:
<pre>
<pre>
function onChatted( player, message )
function onChatted(player, message)
   print( player .. " said " .. message )
   print(player .. " said " .. message)
end
end


function onPlayerAdded( player )
function onPlayerAdded(player)
   player.Chatted:connect( function( message, recipient ) onChatted( player, message ) end )
   player.Chatted:connect(function(message, recipient) onChatted(player, message) end)
end
end


Game.Players.PlayerAdded:connect( onPlayerAdded )
Game.Players.PlayerAdded:connect(onPlayerAdded)
</pre>
</pre>


Line 130: Line 130:
{{example|<pre>
{{example|<pre>
-- turn on connection
-- turn on connection
local conn = part.Touched:connect( onTouched )
local conn = part.Touched:connect(onTouched)


-- later to turn off connection
-- later to turn off connection
conn:disconnect()
conn:disconnect()
</pre>}}
</pre>}}

Revision as of 00:57, 7 December 2010


An Event is a special kind of Roblox Object. It provides a way for user-defined functions to be called when something happens in the Game.

Functions

Events have these functions:

connect

The connect method establishes a function to be called whenever the event occurs. The function is called with the arguments for that event. The connect method returns another special object called a connection object.

Example
game.Workspace.Part.Touched:connect(myTouchedFunction)

This causes myTouchedFunction to be called whenever that Part is touched by another Part.


wait

Works like the global wait function except that instead of waiting for a fixed period of time, it waits for the next occurance of the Event. The return value is arguments of the event.

Example
local otherPart = Workspace.Part.Touched:wait()

This causes the script to stop and wait for that Part to be touched by another Part.

deprecated: disconnect

The old method of using Event:disconnect method is superceded by Connection:disconnect.

Usage

Take the example of the Touched event of Part:

Touched ( BasePart otherPart )
Description Fired when another object comes in contact with this object.
Member of: BasePart

The first section tells you there's an event named "Touched" which has arguments "Instance otherPart". The middle section explains when the event will occur and why. The last section lists types of objects that have this event.

We use this information to create a function and a "connection" line in our script.

Traditionally, such functions are called "handlers" and are named on{Event Name}:

function onTouched()

The arguments that will be passed by the event are given by "Instance otherPart". This means that "otherPart" will be passed and the type will be Instance (which all Parts are).

To allow our function to use that, we defined it as:

function onTouched(otherPart)

Finally, we can used the last piece of information to make a connection to that function:

part.Touched:connect(onTouched)
Example
local part = game.Workspace.Part -- your part here
function onTouched(otherPart)
  otherPart.Transparency = 1 -- make part that touched invisible
  part.BrickColor = BrickColor.Random() -- give this part a new random color
end

part.Touched:connect(onTouched) -- call onTouched each time something touches


Here we are giving "otherPart" to the function. This allows us to use the variable "otherPart" inside the function to be our part that we set up above, in the variable "part".

Limitations

Connections are also automatically removed if:

  • The called function generates an error before the first wait() call.
  • The script itself is removed or reparented.

Note: The connect method does not check that the argument is a valid function. If you misspell the name or otherwise give an invalid function you'll get an error when the event next triggers:

Fri Apr 23 21:50:48 2010 - attempt to call a nil value
Fri Apr 23 21:50:48 2010 - 

Notice that the error has no script reference or line number. This is because it comes from Roblox itself inside the Event generation code.

Advanced Usage

Any function name is valid:

function blah()
  print("In event")
end
part.Changed:connect(blah)

Using anonymous functions in connect is common:

part.Touched:connect( 
function(otherPart)
  otherPart.Transparency = 1
  part.BrickColor = BrickColor.Random()
end) -- end anonymous function and connect

You can also use anonymous functions to change the arguments:

player.Chatted:connect(
function(message, recipient)
  onChatted(player, message) -- new arguments need to match onChatted function call
end)

You can create connections at any time even inside of event functions:

function onChatted(player, message)
  print(player .. " said " .. message)
end

function onPlayerAdded(player)
  player.Chatted:connect(function(message, recipient) onChatted(player, message) end)
end

Game.Players.PlayerAdded:connect(onPlayerAdded)

connection

The connection object is a special object returned by the connect() method of an Event.

Functions

It has 1 method:

disconnect

The connection object disconnect method, removes the association created by connect. The defined function will no longer be called when the Event occurs.

Example
-- turn on connection
local conn = part.Touched:connect(onTouched)

-- later to turn off connection
conn:disconnect()