本文整理汇总了Python中world.World.hit_test方法的典型用法代码示例。如果您正苦于以下问题:Python World.hit_test方法的具体用法?Python World.hit_test怎么用?Python World.hit_test使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类world.World
的用法示例。
在下文中一共展示了World.hit_test方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: Game
# 需要导入模块: from world import World [as 别名]
# 或者: from world.World import hit_test [as 别名]
#.........这里部分代码省略.........
for dy in xrange(height): # check each height
op = list(np)
op[1] -= dy
op[i] += face[i]
if tuple(op) not in self.world.world:
continue
p[i] -= (d - pad) * face[i]
if face == (0, -1, 0) or face == (0, 1, 0):
# You are colliding with the ground or ceiling, so stop
# falling / rising.
self.dy = 0
break
return tuple(p)
def on_mouse_press(self, x, y, button, modifiers):
""" Called when a mouse button is pressed. See pyglet docs for button
amd modifier mappings.
Parameters
----------
x, y : int
The coordinates of the mouse click. Always center of the screen if
the mouse is captured.
button : int
Number representing mouse button that was clicked. 1 = left button,
4 = right button.
modifiers : int
Number representing any modifying keys that were pressed when the
mouse button was clicked.
"""
if self.exclusive:
vector = self.get_sight_vector()
block, previous = self.world.hit_test(self.position, vector)
if (button == mouse.RIGHT) or \
((button == mouse.LEFT) and (modifiers & key.MOD_CTRL)):
# ON OSX, control + left click = right click.
if previous:
self.world.add_block(previous, self.block)
elif button == pyglet.window.mouse.LEFT and block:
texture = self.world.world[block]
if texture != Textures.STONE:
self.world.remove_block(block)
else:
self.set_exclusive_mouse(True)
def on_mouse_motion(self, x, y, dx, dy):
""" Called when the player moves the mouse.
Parameters
----------
x, y : int
The coordinates of the mouse click. Always center of the screen if
the mouse is captured.
dx, dy : float
The movement of the mouse.
"""
if self.exclusive:
m = 0.15
x, y = self.rotation
x, y = x + dx * m, y + dy * m
y = max(-90, min(90, y))
self.rotation = (x, y)
def on_key_press(self, symbol, modifiers):
示例2: GameController
# 需要导入模块: from world import World [as 别名]
# 或者: from world.World import hit_test [as 别名]
class GameController(Controller):
def __init__(self, window):
super(GameController, self).__init__(window)
self.sector, self.highlighted_block, self.crack, self.last_key = (None,) * 4
self.bg_red, self.bg_green, self.bg_blue = (0.0,) * 3
self.mouse_pressed, self.sorted = (False,) * 2
self.count, self.block_damage = (0,) * 2
self.light_y, self.light_z = (1.0,) * 2
self.time_of_day = 0.0
self.hour_deg = 15.0
self.clock = 6
self.back_to_main_menu = threading.Event()
def update(self, dt):
if self.back_to_main_menu.isSet():
self.switch_controller_class(MainMenuController)
return
self.update_sector(dt)
self.update_player(dt)
self.update_mouse(dt)
self.update_time()
self.camera.update(dt)
def update_sector(self, dt):
sector = sectorize(self.player.position)
if sector != self.sector:
self.world.change_sectors(sector)
# When the world is loaded, show every visible sector.
if self.sector is None:
self.world.process_entire_queue()
self.sector = sector
def update_player(self, dt):
m = 8
df = min(dt, 0.2)
for _ in xrange(m):
self.player.update(df / m, self)
def update_mouse(self, dt):
if self.mouse_pressed:
vector = self.player.get_sight_vector()
block, previous = self.world.hit_test(self.player.position, vector,
self.player.attack_range)
self.set_highlighted_block(block)
if self.highlighted_block:
hit_block = self.world[self.highlighted_block]
if hit_block.hardness >= 0:
self.update_block_damage(dt, hit_block)
self.update_block_remove(dt, hit_block)
def update_block_damage(self, dt, hit_block):
multiplier = 1
current_item = self.item_list.get_current_block()
if current_item is not None:
if isinstance(current_item, Tool): # tool
if current_item.tool_type == hit_block.digging_tool:
multiplier = current_item.multiplier
self.block_damage += self.player.attack_power * dt * multiplier
def update_block_remove(self, dt, hit_block):
if self.block_damage >= hit_block.hardness:
self.world.remove_block(self.player,
self.highlighted_block)
self.set_highlighted_block(None)
if getattr(self.item_list.get_current_block_item(), 'durability', -1) != -1:
self.item_list.get_current_block_item().durability -= 1
if self.item_list.get_current_block_item().durability <= 0:
self.item_list.remove_current_block()
self.item_list.update_items()
if hit_block.drop_id is not None \
and self.player.add_item(hit_block.drop_id):
self.item_list.update_items()
self.inventory_list.update_items()
def init_gl(self):
glEnable(GL_ALPHA_TEST)
glAlphaFunc(GL_GREATER, 0.1)
glEnable(GL_COLOR_MATERIAL)
glEnable(GL_BLEND)
glEnable(GL_LINE_SMOOTH)
#glEnable(GL_POLYGON_SMOOTH)
#glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST)
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST)
glClampColorARB(GL_CLAMP_VERTEX_COLOR_ARB, GL_FALSE)
glClampColorARB(GL_CLAMP_FRAGMENT_COLOR_ARB, GL_FALSE)
glClampColorARB(GL_CLAMP_READ_COLOR_ARB, GL_FALSE)
glClearColor(0, 0, 0, 0)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
def setup(self):
try:
#Make sure the address they want to connect to works
ipport = G.IP_ADDRESS.split(":")
if len(ipport) == 1: ipport.append(1486)
#.........这里部分代码省略.........
示例3: GameController
# 需要导入模块: from world import World [as 别名]
# 或者: from world.World import hit_test [as 别名]
class GameController(Controller):
def __init__(self, window):
super(GameController, self).__init__(window)
self.sector, self.highlighted_block, self.crack, self.last_key = (None,) * 4
self.bg_red, self.bg_green, self.bg_blue = (0.0,) * 3
self.mouse_pressed, self.sorted = (False,) * 2
self.count, self.block_damage = (0,) * 2
self.light_y, self.light_z = (1.0,) * 2
self.time_of_day = 0.0
self.hour_deg = 15.0
self.clock = 6
self.back_to_main_menu = threading.Event()
def update(self, dt):
if self.back_to_main_menu.isSet():
self.switch_controller_class(MainMenuController)
return
self.update_sector(dt)
self.update_player(dt)
self.update_mouse(dt)
self.update_time()
self.camera.update(dt)
def update_sector(self, dt):
sector = sectorize(self.player.position)
if sector != self.sector:
self.world.change_sectors(sector)
# When the world is loaded, show every visible sector.
if self.sector is None:
self.world.process_entire_queue()
self.sector = sector
def update_player(self, dt):
m = 8
df = min(dt, 0.2)
for _ in xrange(m):
self.player.update(df / m, self)
for ply in self.player_ids.itervalues():
for _ in xrange(m):
ply.update(df / m, self)
momentum = self.player.get_motion_vector(15 if self.player.flying else 5*self.player.current_density)
if momentum != self.player.momentum_previous:
self.player.momentum_previous = momentum
self.packetreceiver.send_movement(momentum, self.player.position)
def update_mouse(self, dt):
if self.mouse_pressed:
vector = self.player.get_sight_vector()
block, previous = self.world.hit_test(self.player.position, vector,
self.player.attack_range)
self.set_highlighted_block(block)
if self.highlighted_block:
hit_block = self.world[self.highlighted_block]
if hit_block.hardness >= 0:
self.update_block_damage(dt, hit_block)
self.update_block_remove(dt, hit_block)
def update_block_damage(self, dt, hit_block):
multiplier = 1
current_item = self.item_list.get_current_block()
if current_item is not None:
if isinstance(current_item, Tool): # tool
if current_item.tool_type == hit_block.digging_tool:
multiplier = current_item.multiplier
self.block_damage += self.player.attack_power * dt * multiplier
def update_block_remove(self, dt, hit_block):
if self.block_damage >= hit_block.hardness:
self.world.remove_block(self.player,
self.highlighted_block)
self.set_highlighted_block(None)
if getattr(self.item_list.get_current_block_item(), 'durability', -1) != -1:
self.item_list.get_current_block_item().durability -= 1
if self.item_list.get_current_block_item().durability <= 0:
self.item_list.remove_current_block()
self.item_list.update_items()
if hit_block.drop_id is None:
return
if type(hit_block.drop_id) == list:
for index, item in enumerate(hit_block.drop_id):
if not self.player.add_item(item, quantity=hit_block.drop_quantity[index]):
return
elif not self.player.add_item(hit_block.drop_id, quantity=hit_block.drop_quantity):
return
self.item_list.update_items()
self.inventory_list.update_items()
def init_gl(self):
glEnable(GL_ALPHA_TEST)
glAlphaFunc(GL_GREATER, 0.1)
glEnable(GL_COLOR_MATERIAL)
glEnable(GL_BLEND)
glEnable(GL_LINE_SMOOTH)
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST)
glEnable(GL_POLYGON_SMOOTH)
#.........这里部分代码省略.........