You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GameMaker碰撞问题求助:1v1坦克游戏自定义移动逻辑的碰撞解决方案

1v1坦克游戏碰撞问题解决方案建议

以下是针对你的坦克控制逻辑和碰撞问题的具体优化建议:

  • 替换motion_add为精准速度控制
    当前用motion_add会持续累加速度,导致坦克速度失控,碰撞时易出现穿模、卡顿。改用直接计算速度向量的方式,确保移动速度始终稳定:

    // W键前进(修正角度适配GameMaker坐标系)
    if keyboard_check(ord("W")) {
        var _move_dir = image_angle - 90; // GameMaker默认0度朝右,调整为坦克朝向对应前进方向
        hspeed = lengthdir_x(_velocidad, _move_dir);
        vspeed = lengthdir_y(_velocidad, _move_dir);
    }
    // S键后退
    else if keyboard_check(ord("S")) {
        var _move_dir = image_angle + 90;
        hspeed = lengthdir_x(_velocidad, _move_dir);
        vspeed = lengthdir_y(_velocidad, _move_dir);
    }
    // 无前后输入时停止移动
    else {
        hspeed = 0;
        vspeed = 0;
    }
    
  • 添加步进式碰撞修正逻辑
    在移动代码后加入碰撞检测与位置修正,避免坦克穿模:

    // 以墙体对象obj_wall为例,处理垂直方向碰撞
    if place_meeting(x, y + vspeed, obj_wall) {
        while !place_meeting(x, y + sign(vspeed), obj_wall) {
            y += sign(vspeed);
        }
        vspeed = 0;
    }
    // 处理水平方向碰撞
    if place_meeting(x + hspeed, y, obj_wall) {
        while !place_meeting(x + sign(hspeed), y, obj_wall) {
            x += sign(hspeed);
        }
        hspeed = 0;
    }
    
  • 分离炮塔旋转的作用范围
    当前炮塔旋转逻辑未做玩家区分,1v1游戏中会导致双方炮塔同时响应按键。建议添加玩家身份判断:

    // 假设此代码属于玩家1的坦克对象
    if (instance_exists(obj_canon) && id == obj_player1) {
        if keyboard_check(vk_right) {   
            obj_canon.image_angle -= 1.33;
        }
        if keyboard_check(vk_left) {   
            obj_canon.image_angle += 1.33;
        }
    }
    
  • 使用内置函数简化碰撞处理
    GameMaker的move_and_collide函数可自动处理移动与碰撞,大幅简化代码:

    if keyboard_check(ord("W")) {
        move_and_collide(lengthdir_x(_velocidad, image_angle-90), lengthdir_y(_velocidad, image_angle-90), obj_wall, true);
    }
    else if keyboard_check(ord("S")) {
        move_and_collide(lengthdir_x(_velocidad, image_angle+90), lengthdir_y(_velocidad, image_angle+90), obj_wall, true);
    }
    else {
        hspeed = 0;
        vspeed = 0;
    }
    

    该函数会在碰撞时自动停止移动并修正位置,返回布尔值可用于后续逻辑判断。

内容的提问来源于stack exchange,提问作者Yakken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 15:07:19