{"id":1099,"date":"2026-03-23T09:00:15","date_gmt":"2026-03-23T09:00:15","guid":{"rendered":"https:\/\/salvador.mata.com.mx\/blog\/?p=1099"},"modified":"2026-03-20T21:59:24","modified_gmt":"2026-03-20T21:59:24","slug":"sensores-actuadores-desde-python","status":"publish","type":"post","link":"https:\/\/salvador.mata.com.mx\/blog\/2026\/03\/23\/sensores-actuadores-desde-python\/","title":{"rendered":"\ud83d\udc0d Llamando Sensores y Actuadores desde Python en Range"},"content":{"rendered":"<h1>\ud83d\udc0d Llamando Sensores y Actuadores desde Python en Range<\/h1>\n<p>En este tutorial aprender\u00e1s a acceder y utilizar <strong>sensores<\/strong> y <strong>actuadores<\/strong> directamente desde un script en <strong>Python<\/strong> dentro de <strong>Range<\/strong>.<\/p>\n<p>La idea es simple: vamos a usar un cubo llamado <strong>&#8220;Player&#8221;<\/strong>, que se mover\u00e1 utilizando las teclas <strong>W, A, S, D<\/strong>, pero a diferencia del tutorial anterior, esta vez <strong>utilizaremos mas sensores y actuadores<\/strong> y los mandaremos llamar <strong>completamente desde c\u00f3digo<\/strong>.<\/p>\n<hr \/>\n<h2>\ud83e\uddf1 Preparaci\u00f3n en la escena<\/h2>\n<ol>\n<li>Crea un cubo y ren\u00f3mbralo como:<br \/>\n\ud83d\udc49 <strong>Player<\/strong><\/li>\n<li>Agrega los siguientes <strong>sensores tipo Keyboard<\/strong>:\n<ul>\n<li>\u2328\ufe0f <span style=\"color: #99cc00;\">W<\/span><\/li>\n<li><span style=\"color: #99cc00;\">\u2328\ufe0f A<\/span><\/li>\n<li><span style=\"color: #99cc00;\">\u2328\ufe0f S<\/span><\/li>\n<li><span style=\"color: #99cc00;\">\u2328\ufe0f D<\/span><\/li>\n<\/ul>\n<\/li>\n<li>Agrega los siguientes <strong>actuadores tipo Motion<\/strong>:\n<ul>\n<li>\u2699\ufe0f <span style=\"color: #99cc00;\">W<\/span><\/li>\n<li><span style=\"color: #99cc00;\">\u2699\ufe0f A<\/span><\/li>\n<li><span style=\"color: #99cc00;\">\u2699\ufe0f S<\/span><\/li>\n<li><span style=\"color: #99cc00;\">\u2699\ufe0f D<\/span><\/li>\n<\/ul>\n<\/li>\n<li>\u26a0\ufe0f Muy importante:<br \/>\nAseg\u00farate de que cada sensor y actuador tenga exactamente el mismo nombre.<\/li>\n<li>Agrega un <strong>controller Python<\/strong> y enlaza todos los sensores a este controller.<\/li>\n<\/ol>\n<p>Para que no quede dudas en este paso de colocar Sensores, Controladores y Actuadores, aqui tienes este GIF para que veas el\u00a0 proceso completo.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1102\" src=\"https:\/\/salvador.mata.com.mx\/blog\/wp-content\/uploads\/2026\/03\/RangeEngine_LKb2Afk40x.gif\" alt=\"\" width=\"1113\" height=\"316\" \/><\/p>\n<hr \/>\n<h2>\ud83d\udcbb Script en Python<\/h2>\n<p data-start=\"80\" data-end=\"281\">A continuaci\u00f3n tenemos el siguiente script en Python. A grandes rasgos, este script se encarga de enlazarse con el controller y obtener referencias a los sensores y actuadores por medio de sus nombres.<\/p>\n<p data-start=\"283\" data-end=\"524\">Es importante que respetes la nomenclatura utilizada, ya que los nombres de los sensores y actuadores deben coincidir exactamente con los definidos en el c\u00f3digo. De lo contrario, el script no podr\u00e1 encontrarlos y no funcionar\u00e1 correctamente.<\/p>\n<blockquote>\n<pre><code class=\"language-python\"><span style=\"color: #99cc00;\">import Range\r\n\r\n<span style=\"color: #008000;\"># =========================================================\r\n<span style=\"color: #ff9900;\"># OBTENER EL CONTROLLER Y EL OBJETO<\/span>\r\n# =========================================================<\/span>\r\n<span style=\"color: #008000;\">\r\n# Obtenemos el controller que est\u00e1 ejecutando este script\r\n# Este controller es el puente entre Python y los Logic Bricks<\/span>\r\ncont = Range.logic.getCurrentController()\r\n\r\n<span style=\"color: #008000;\"># Obtenemos el objeto due\u00f1o del controller (en este caso, el cubo \"Player\")<\/span>\r\nown = cont.owner\r\n\r\n<span style=\"color: #008000;\">\r\n# =========================================================\r\n<span style=\"color: #ff9900;\"># ACCESO A LOS SENSORES<\/span>\r\n# =========================================================<\/span>\r\n\r\n<span style=\"color: #008000;\"># Aqu\u00ed estamos \"llamando\" cada sensor por su nombre\r\n# Estos nombres deben coincidir exactamente con los que creaste en el objeto<\/span>\r\n\r\nw = cont.sensors[\"W\"]  <span style=\"color: #008000;\"># Sensor de la tecla W<\/span>\r\ns = cont.sensors[\"S\"]  <span style=\"color: #008000;\"># Sensor de la tecla S<\/span>\r\na = cont.sensors[\"A\"]  <span style=\"color: #008000;\"># Sensor de la tecla A<\/span>\r\nd = cont.sensors[\"D\"]  <span style=\"color: #008000;\"># Sensor de la tecla D<\/span>\r\n\r\n<span style=\"color: #008000;\">\r\n# =========================================================\r\n<span style=\"color: #ff9900;\"># ACCESO A LOS ACTUADORES<\/span>\r\n# =========================================================\r\n\r\n# Igual que con los sensores, accedemos a los actuadores por nombre\r\n# Cada uno controla un movimiento diferente del objeto<\/span>\r\n\r\nw_act = cont.actuators[\"W\"]  <span style=\"color: #008000;\"># Actuador para avanzar<\/span>\r\ns_act = cont.actuators[\"S\"]  <span style=\"color: #008000;\"># Actuador para retroceder<\/span>\r\na_act = cont.actuators[\"A\"]  <span style=\"color: #008000;\"># Actuador para moverse a la izquierda<\/span>\r\nd_act = cont.actuators[\"D\"]  <span style=\"color: #008000;\"># Actuador para moverse a la derecha\r\n\r\n\r\n# =========================================================\r\n<span style=\"color: #ff9900;\"># L\u00d3GICA DE MOVIMIENTO<\/span>\r\n# =========================================================\r\n\r\n# Cada sensor tiene una propiedad llamada \"positive\"\r\n# Esta propiedad es TRUE cuando la tecla est\u00e1 presionada<\/span>\r\n\r\n<span style=\"color: #ff9900;\"># -------- TECLA W --------<\/span>\r\nif w.positive:\r\n    <span style=\"color: #008000;\"># Si la tecla W est\u00e1 presionada, activamos su actuador<\/span>\r\n    cont.activate(w_act)\r\nelse:\r\n    <span style=\"color: #008000;\"># Si no est\u00e1 presionada, desactivamos el actuador<\/span>\r\n    cont.deactivate(w_act)\r\n\r\n<span style=\"color: #ff9900;\"># -------- TECLA S --------<\/span>\r\nif s.positive:\r\n    cont.activate(s_act)\r\nelse:\r\n    cont.deactivate(s_act)\r\n\r\n<span style=\"color: #ff9900;\"># -------- TECLA A --------<\/span>\r\nif a.positive:\r\n    cont.activate(a_act)\r\nelse:\r\n    cont.deactivate(a_act)\r\n\r\n<span style=\"color: #ff9900;\"># -------- TECLA D --------<\/span>\r\nif d.positive:\r\n    cont.activate(d_act)\r\nelse:\r\n    cont.deactivate(d_act)\r\n\r\n\r\n<span style=\"color: #008000;\"># =========================================================\r\n# NOTA IMPORTANTE\r\n# =========================================================\r\n\r\n<span style=\"color: #ff9900;\"># Este script se ejecuta constantemente (cada frame del juego)\r\n# Esto significa que en todo momento est\u00e1 revisando:\r\n# - Si una tecla est\u00e1 presionada\r\n# - Y activando o desactivando su actuador en consecuencia<\/span><\/span><\/span><\/code><code class=\"language-python\"><\/code><\/pre>\n<\/blockquote>\n<p>Copia y pega este Script dentro del editor de texto de Range y nombralo &#8220;<span style=\"color: #008000;\"><strong>mover.py<\/strong><\/span>&#8220;. Aqu\u00ed te dejo un video del proceso de pegar el script en el editor de texto de Range.<\/p>\n<p style=\"text-align: center;\"><code>\n<div class=\"wp-block-presto-player-reusable-edit\"><!--presto-player:video_id=21--><figure class=\"wp-block-video presto-block-video  presto-provider-youtube\" style=\"--plyr-color-main: var(--presto-player-highlight-color, #18b103); --presto-player-logo-width: 150px; \">\n\t<presto-player \n\t\tpreset='{&quot;id&quot;:1,&quot;name&quot;:&quot;Default&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;icon&quot;:&quot;format-video&quot;,&quot;skin&quot;:&quot;modern&quot;,&quot;play-large&quot;:true,&quot;rewind&quot;:true,&quot;play&quot;:true,&quot;fast-forward&quot;:true,&quot;progress&quot;:true,&quot;current-time&quot;:true,&quot;mute&quot;:true,&quot;volume&quot;:true,&quot;speed&quot;:false,&quot;pip&quot;:false,&quot;fullscreen&quot;:true,&quot;captions&quot;:false,&quot;reset_on_end&quot;:true,&quot;auto_hide&quot;:true,&quot;show_time_elapsed&quot;:false,&quot;captions_enabled&quot;:false,&quot;save_player_position&quot;:true,&quot;sticky_scroll&quot;:false,&quot;sticky_scroll_position&quot;:&quot;bottom right&quot;,&quot;on_video_end&quot;:&quot;select&quot;,&quot;play_video_viewport&quot;:false,&quot;hide_youtube&quot;:false,&quot;lazy_load_youtube&quot;:false,&quot;hide_logo&quot;:false,&quot;border_radius&quot;:0,&quot;caption_style&quot;:&quot;&quot;,&quot;caption_background&quot;:&quot;&quot;,&quot;is_locked&quot;:true,&quot;cta&quot;:[&quot;&quot;],&quot;watermark&quot;:[&quot;&quot;],&quot;search&quot;:[&quot;&quot;],&quot;email_collection&quot;:[&quot;&quot;],&quot;action_bar&quot;:[&quot;&quot;],&quot;created_by&quot;:1,&quot;created_at&quot;:&quot;2025-10-24 15:24:09&quot;,&quot;updated_at&quot;:&quot;2025-10-24 15:24:09&quot;,&quot;deleted_at&quot;:&quot;&quot;}'\n\t\tbranding='{&quot;logo&quot;:&quot;&quot;,&quot;logo_width&quot;:150,&quot;color&quot;:&quot;#18b103&quot;,&quot;player_css&quot;:&quot;&quot;}'\n\t\tchapters='[]'\n\t\toverlays='[]'\n\t\ttracks='[]'\n\t\tblock-attributes='{&quot;playsInline&quot;:true,&quot;id&quot;:21,&quot;src&quot;:&quot;https:\\\/\\\/youtu.be\\\/lECn11FXGeI&quot;,&quot;preset&quot;:1,&quot;video_id&quot;:&quot;lECn11FXGeI&quot;,&quot;visibility&quot;:&quot;public&quot;,&quot;color&quot;:&quot;#00b3ff&quot;,&quot;mutedPreview&quot;:{&quot;enabled&quot;:false,&quot;captions&quot;:false},&quot;mutedOverlay&quot;:{&quot;enabled&quot;:false,&quot;src&quot;:&quot;&quot;,&quot;width&quot;:200,&quot;focalPoint&quot;:{&quot;x&quot;:0.5,&quot;y&quot;:0.5}},&quot;mutedOverlayType&quot;:&quot;text&quot;,&quot;mutedOverlayText&quot;:&quot;Click to play&quot;,&quot;mutedOverlayImageWidth&quot;:200,&quot;chapters&quot;:[],&quot;overlays&quot;:[],&quot;tracks&quot;:[],&quot;title&quot;:&quot;https:\\\/\\\/youtu.be\\\/lECn11FXGeI&quot;}'\n\t\tanalytics=''\n\t\tautomations\t\tprovider='youtube'\n\t\t\t\tid=\"presto-player-1\"\n\t\tsrc=\"\/\/www.youtube.com\/embed\/lECn11FXGeI?iv_load_policy=3&amp;modestbranding=1&amp;playinline=1&amp;showinfo=0&amp;rel=0&amp;enablejsapi=1\"\n\t\tmedia-title=\"https:\/\/youtu.be\/lECn11FXGeI\"\n\t\tcss=\"\"\n\t\tclass=\"presto-video-id-21 presto-preset-id-1 skin-modern\"\n\t\tskin=\"modern\" \n\t\ticon-url=\"https:\/\/salvador.mata.com.mx\/blog\/wp-content\/plugins\/presto-player\/img\/sprite.svg\" \n\t\tpreload=\"\" \n\t\tposter=\"\"\n\t\tyoutube=\"{&quot;noCookie&quot;:false,&quot;channelId&quot;:&quot;&quot;,&quot;show_count&quot;:false}\"\n\t\tprovider-video-id=\"lECn11FXGeI\"\n\t\tvideo-id=\"21\"\n\t\t\t\tvideo-attributes='{}'\n\t\tplaysinline\t\t\t\t>\n\t\t\n    <div class=\"presto-iframe-fallback-container\">\n        <iframe style=\"width: 100%\" title=\"Youtube Video\" class=\"presto-fallback-iframe\" id=\"presto-iframe-fallback-1\" data-src=\"https:\/\/www.youtube.com\/embed\/lECn11FXGeI?iv_load_policy=3&amp;modestbranding=1&amp;playsinline=1&amp;showinfo=0&amp;rel=0&amp;enablejsapi=1\" allowfullscreen allowtransparency allow=\"autoplay\"><\/iframe>\n    <\/div>\n\n\t<\/presto-player>\n<\/figure><\/div>\n<\/code><\/p>\n<p data-start=\"69\" data-end=\"166\">Ahora que ya tienes el script listo en el editor de texto, es momento de asignarlo al controller.<\/p>\n<p data-start=\"168\" data-end=\"374\">Para hacerlo, cambia el tipo de controller de <strong data-start=\"214\" data-end=\"223\">&#8220;<span style=\"color: #008000;\">And<\/span>&#8220;<\/strong> a <strong data-start=\"226\" data-end=\"238\">&#8220;<span style=\"color: #008000;\">Python<\/span>&#8220;<\/strong>. Despu\u00e9s, haz clic en el campo de texto del script; esto desplegar\u00e1 la lista de archivos disponibles desde el editor de texto de Range.<\/p>\n<p data-start=\"376\" data-end=\"499\">Ah\u00ed deber\u00edas ver tu archivo <strong data-start=\"404\" data-end=\"418\">&#8220;<span style=\"color: #008000;\">mover.py<\/span>&#8220;<\/strong>. Selecci\u00f3nalo y con eso tu script quedar\u00e1 correctamente vinculado al controller.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1105\" src=\"https:\/\/salvador.mata.com.mx\/blog\/wp-content\/uploads\/2026\/03\/RangeEngine_r7ZwsYbTf1.gif\" alt=\"\" width=\"749\" height=\"236\" \/><\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<h2>\ud83e\udde0 \u00bfQu\u00e9 est\u00e1 pasando aqu\u00ed?<\/h2>\n<ul>\n<li>Obtenemos el <strong>controller activo<\/strong><\/li>\n<li><span style=\"color: #99cc00;\">Desde ah\u00ed accedemos a:<\/span>\n<ul>\n<li><span style=\"color: #008000;\">\ud83c\udfaf Sensores \u2192 detectan entrada del usuario<\/span><\/li>\n<li><span style=\"color: #008000;\">\u2699\ufe0f Actuadores \u2192 ejecutan acciones<\/span><\/li>\n<\/ul>\n<\/li>\n<li><span style=\"color: #99cc00;\">Usamos <code><span style=\"color: #008000;\">.positive<\/span><\/code> para saber si una tecla est\u00e1 presionada<\/span><\/li>\n<li><span style=\"color: #99cc00;\"><span style=\"color: #008000;\">Activamos<\/span> o <span style=\"color: #008000;\">desactivamos<\/span> actuadores en tiempo real<\/span><\/li>\n<\/ul>\n<hr \/>\n<h2>\ud83c\udfae Resultado<\/h2>\n<p>Al ejecutar la escena:<\/p>\n<ul>\n<li><span style=\"color: #99cc00;\">\ud83d\udfe6 El cubo <strong>Player<\/strong> se mover\u00e1 usando W, A, S, D<\/span><\/li>\n<li><span style=\"color: #99cc00;\">\ud83d\udc0d Todo el control pasa por Python<\/span><\/li>\n<li><span style=\"color: #99cc00;\">\ud83d\udd27 Est\u00e1s combinando l\u00f3gica visual con scripting<\/span><\/li>\n<\/ul>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1107\" src=\"https:\/\/salvador.mata.com.mx\/blog\/wp-content\/uploads\/2026\/03\/RangeEngine_gOpfKszABN.gif\" alt=\"\" width=\"638\" height=\"370\" \/><\/p>\n<p data-start=\"63\" data-end=\"224\">En este punto, es posible que con los valores actuales de los actuadores el movimiento del cubo se sienta muy lento, tanto al avanzar y retroceder como al rotar.<\/p>\n<p data-start=\"226\" data-end=\"340\">Esto es completamente normal y puedes ajustarlo f\u00e1cilmente modificando los valores directamente en los actuadores.<\/p>\n<p data-start=\"342\" data-end=\"354\"><strong><span style=\"color: #008000;\">Por ejemplo:<\/span><\/strong><\/p>\n<ul data-start=\"355\" data-end=\"552\">\n<li data-section-id=\"pheyko\" data-start=\"355\" data-end=\"453\">\n<p data-start=\"357\" data-end=\"453\"><span style=\"color: #99cc00;\">Para <span style=\"color: #008000;\"><strong data-start=\"362\" data-end=\"367\">W<\/strong> <\/span>y <span style=\"color: #008000;\"><strong data-start=\"370\" data-end=\"375\">S<\/strong> <\/span>puedes usar valores como <code data-start=\"401\" data-end=\"406\"><span style=\"color: #ff9900;\">0.1<\/span><\/code> y <code data-start=\"409\" data-end=\"415\"><span style=\"color: #ff9900;\">-0.1<\/span><\/code> para controlar el <strong>avance y retroceso<\/strong>.<\/span><\/p>\n<\/li>\n<li data-section-id=\"nj318o\" data-start=\"454\" data-end=\"552\">\n<p data-start=\"456\" data-end=\"552\"><span style=\"color: #99cc00;\">Para <span style=\"color: #008000;\"><strong data-start=\"461\" data-end=\"466\">A<\/strong> <\/span>y <span style=\"color: #008000;\"><strong data-start=\"469\" data-end=\"474\">D<\/strong> <\/span>puedes usar valores como <code data-start=\"500\" data-end=\"505\"><span style=\"color: #ff9900;\">1.5<\/span><\/code> y <code data-start=\"508\" data-end=\"514\"><span style=\"color: #ff9900;\">-1.5<\/span><\/code> para lograr una <strong>rotaci\u00f3n m\u00e1s notoria<\/strong>.<\/span><\/p>\n<\/li>\n<\/ul>\n<p data-start=\"554\" data-end=\"682\">Te recomiendo experimentar con estos valores hasta encontrar un comportamiento que se sienta c\u00f3modo y adecuado para tu proyecto.<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<h2>\ud83d\ude80 Nota final<\/h2>\n<p>Si no entiendes todo el script al inicio, no te preocupes.<\/p>\n<p>Es completamente normal comenzar trabajando con c\u00f3digo que no escribiste t\u00fa mismo. Lo importante aqu\u00ed es empezar a reconocer patrones: c\u00f3mo se llaman sensores, c\u00f3mo se activan actuadores, y c\u00f3mo se estructura la l\u00f3gica.<\/p>\n<p>Con la pr\u00e1ctica, estos comandos se ir\u00e1n quedando en tu memoria y cada vez te resultar\u00e1 m\u00e1s natural programar dentro de Range. Y como siempre aqui abajo te dejo el archivo, por si necesitas revisarlo y probarlo.<\/p>\n<p style=\"text-align: center;\"><span class=\"shared-files-shortcode-admin-list shared-files-shortcode-admin-list-file shared-files-shortcode-1108\" title=\"&lt;div class=&quot;shared-files-embed-69e89098dd49a shared-files-main-container&quot; data-elem-class=&quot;shared-files-embed-69e89098dd49a&quot; data-search-type=&quot;0&quot; data-post-id=&quot;1099&quot;&gt;&lt;div class=&quot;shared-files-search&quot;&gt;&lt;ul class=&quot;shared-files-main-file-list&quot;&gt;&lt;li class=&quot;shared-files-card-1108&quot;&gt;&lt;div class=&quot;shared-files-main-elements&quot;&gt;&lt;div class=&quot;shared-files-main-elements-left&quot; style=&quot;background-image: url(https:\/\/salvador.mata.com.mx\/blog\/wp-content\/plugins\/shared-files\/img\/2020\/zip.svg);&quot;&gt;&lt;\/div&gt;&lt;div class=&quot;shared-files-main-elements-right&quot;&gt;&lt;a class=&quot;shared-files-file-title&quot;  data-file-type=&quot;&quot;  data-file-url=&quot;\/blog\/uploads\/shared-files\/1108\/?mover_python_actuadores_sensores.zip&quot;  data-external-url=&quot;&quot;  data-image-url=&quot;&quot; href=&quot;\/blog\/uploads\/shared-files\/1108\/?mover_python_actuadores_sensores.zip&quot; target=&quot;_blank&quot;&gt;Python -Sensor Actuators&lt;\/a&gt;&lt;span class=&quot;shared-file-size&quot;&gt;85.00 KB&lt;\/span&gt;&lt;span class=&quot;shared-file-date&quot;&gt;March 20, 2026&lt;\/span&gt;&lt;div class=&quot;shared-files-download-counter&quot;&gt;&lt;span&gt;Downloads: 42&lt;\/span&gt;&lt;\/div&gt;&lt;div class=&quot;shared-files-download-button-container&quot;&gt;&lt;a href=&quot;\/blog\/uploads\/shared-files\/1108\/?mover_python_actuadores_sensores.zip&amp;download=1&quot; class=&quot;shared-files-download-button&quot;  download&gt;Download&lt;\/a&gt;&lt;\/div&gt;&lt;div class=&quot;shared-files-edit-actions&quot;&gt;&lt;\/div&gt;&lt;\/div&gt;&lt;\/div&gt;&lt;\/li&gt;&lt;\/ul&gt;&lt;\/div&gt;&lt;\/div&gt;\"><div class=\"shared-files-embed-69e89098e2d01 shared-files-main-container\" data-elem-class=\"shared-files-embed-69e89098e2d01\" data-search-type=\"0\" data-post-id=\"1108\"><div class=\"shared-files-search\"><ul class=\"shared-files-main-file-list\"><li class=\"shared-files-card-1108\"><div class=\"shared-files-main-elements\"><div class=\"shared-files-main-elements-left\" style=\"background-image: url(https:\/\/salvador.mata.com.mx\/blog\/wp-content\/plugins\/shared-files\/img\/2020\/zip.svg);\"><\/div><div class=\"shared-files-main-elements-right\"><a class=\"shared-files-file-title\"  data-file-type=\"\"  data-file-url=\"\/blog\/uploads\/shared-files\/1108\/?mover_python_actuadores_sensores.zip\"  data-external-url=\"\"  data-image-url=\"\" href=\"\/blog\/uploads\/shared-files\/1108\/?mover_python_actuadores_sensores.zip\" target=\"_blank\">Python -Sensor Actuators<\/a><span class=\"shared-file-size\">85.00 KB<\/span><span class=\"shared-file-date\">March 20, 2026<\/span><div class=\"shared-files-download-counter\"><span>Downloads: 42<\/span><\/div><div class=\"shared-files-download-button-container\"><a href=\"\/blog\/uploads\/shared-files\/1108\/?mover_python_actuadores_sensores.zip&download=1\" class=\"shared-files-download-button\"  download>Download<\/a><\/div><div class=\"shared-files-edit-actions\"><\/div><\/div><\/div><\/li><\/ul><\/div><\/div><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc0d Llamando Sensores y Actuadores desde Python en Range En este tutorial aprender\u00e1s a acceder y utilizar sensores y actuadores directamente desde un script en Python dentro de Range. La idea es simple: vamos a usar un cubo llamado &#8220;Player&#8221;, que se mover\u00e1 utilizando las teclas W, A, S, D, pero a diferencia del tutorial [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1113,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[136],"tags":[159,181,182],"class_list":["post-1099","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-logic-bricks","tag-python","tag-visual-scripting"],"_links":{"self":[{"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1099","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=1099"}],"version-history":[{"count":14,"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1099\/revisions"}],"predecessor-version":[{"id":1123,"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1099\/revisions\/1123"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/media\/1113"}],"wp:attachment":[{"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=1099"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=1099"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/salvador.mata.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=1099"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}