2015-01-13 4 views
1

Я хочу сделать что-то за 20 тиков, но только если 2 черепахи (разные породы и фигуры) находятся на одном патче. Однако то, что я хочу сделать, связано с элементами контекста наблюдателя. Если можно каким-либо образом разрешить функцию наблюдателя вызываться в контексте контекста черепахи? Помощь приветствуется. Благодаря! (Игроки порода)Netlogo Функция контекста наблюдателя в контексте черепахи

to function1 
     ask turtles with [shape = "car"] 
     [if any? players-here [shieldTurtle]] 
    end 

    to shieldTurtle 
     let startTicks ticks 
     if ticks <= (startTicks + 20) 
     [stop randomKill 
      stop randomDamage 
      stop randomSpeed] 
    end 
+0

, возможно, это будет полезно: http://stackoverflow.com/a/23474481/86485 –

+0

Не могли бы вы обратиться к проблеме по-другому, передав информацию между функциями. Например, создайте логическую глобальную переменную (скажем, хотите-остановить?) И пусть randomKill и т. Д. Включают 'если хотите-остановить? стоп'. Тогда вы могли бы просто «установить ставку на остановку»? true "в вашей функции1. – JenB

ответ

1

Вслед за предложением Сета:

turtles-own [start-shield] 

to setup 
    ask turtles [set start-shield -20] 
end 

to function1 
    ask turtles with [shape = "car"] [ 
    if any? players-here [shieldTurtle] 
    ] 
end 

to shieldTurtle 
    set start-shield ticks 
end 

to randomKill ;;turtle proc 
    if (ticks - start-shield < 20) [stop] ;;shielded turtle exits 
    doThis 
    doThat 
end 

и т.д.

Смежные вопросы